操作系统与shell

2023-11-08

操作系统与shell

一、什么是操作系统

操作系统,即Operating System,OS,是内核(kernel)、shell以及一系列应用软件、驱动的集合。

OS的作用在于:

  • 管理好硬件和软件,包括进程管理、文件管理、内存管理和设备管理;
  • 为用户提供一个稳定的运行环境。

注:所谓管理,本质上就是描述(struct)并组织(数据结构+算法)

1、什么是kernel

内核(kernel),是操作系统的内部核心管理程序,它向外部提供了一系列的对计算机资源进行管理的接口,即系统调用接口(System Call)。内核以外的程序统称为“外部管理程序”。

2、什么是shell

尽管已经有了功能强大的操作系统,但是直接控制OS以管理软硬件,学习成本较高,且一旦出现错误操作很可能会直接威胁内核,因此开发者们引入了shell:

shell,即外壳,是连接用户和操作系统的软件层,包裹在操作系统的外层。

shell的作用包括两方面:

  • 与操作系统进行交互,接收用户的命令并将其传达给操作系统,最后进行反馈。从这一层面,shell可以看作一个==“命令行解释器”,linux中的默认命令行解释器名为"bash"==。
  • shell作为用户和操作系统的中间层,起到了“保护内核”的作用。

二、System Call

为了保护内核,操作系统不相信任何用户,不允许用户越过自己来直接操作它管理的软硬件资源。

因此,操作系统向外暴露了一系列的系统调用接口(System Call)供shell和语言的库函数使用(不同语言的部分函数底层都会调用系统接口)。

img

补充:用户态与内核态

用户态与内核态本质是CPU的两种状态

进程一般运行在CPU的==用户态==。在用户状态下,CPU只能执行非特权指令,这些指令不能直接访问系统资源。

但是当进程代码试图通过系统调用接口获取OS提供的服务时,OS要先将CPU切换至==内核态==,在这种状态下,CPU能够执行特权指令,从而访问到更多OS管理的资源。‘

区分用户态和内核态本质就是为了保证操作系统的安全性。

注意:从用户态切换到内核态的过程是耗时的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作系统与shell 的相关文章

  • 迭代 bash 脚本中的变量名称

    我需要在一堆文件上运行一个脚本 这些文件的路径被分配给train1 train2 train20 我想 为什么不使用 bash 脚本使其自动执行呢 所以我做了类似的事情 train1 path to first file train2 pa
  • Linux 中的动态环境变量?

    Linux 中是否可以通过某种方式拥有动态环境变量 我有一个网络服务器 网站遵循以下布局 site qa production 我想要一个环境变量 例如 APPLICATION ENV 当我在 qa 目录中时设置为 qa 当我在生产目录中时
  • jq:将对象数组转换为对象

    我收到了来自curl的回复 格式如下 list value 1 id 12 value 15 id 13 value 4 id 14 给定 id 之间的映射 如下所示 12 newId1 13 newId2 14 newId3 我想做这个
  • arm64和armhf有什么区别?

    Raspberry Pi Type 3 具有 64 位 CPU 但其架构不是arm64 but armhf 有什么区别arm64 and armhf armhf代表 arm hard float 是给定的名称Debian 端口 https
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两
  • Git difftool 未启动外部 DiffMerge 程序

    我一直遵循 戴夫的博客条目 http www davesquared net 2009 05 setting up git difftool on windows html 链接在此answer https stackoverflow co
  • 如何在 Windows 下向 .sh 脚本传递参数?

    我正在尝试在 Windows 下执行 sh 脚本 我安装了 Git 它允许我执行 sh 文件 但是 如果不使用 sh 作为执行前缀 我似乎无法传递任何参数 我的 sh 文件 echo Test 1 如果我用以下命令执行它 gt sh tes
  • 获取变量的名称作为输入并使用该名称更改变量

    我从脚本用户那里获取变量的名称作为第一个参数 并将该变量的值回显到控制台 bin bash variablename 1 echo The value of variablename is variablename 这太棒了 我无法开始工作
  • Linux:如何从特定端口发送TCP数据包?

    如何打开原始套接字以从特定 TCP 端口发送 我希望所有连接始终来自临时端口以下的一系列端口 如果您正在使用raw套接字 然后只需在数据包标头中填写正确的 TCP 源端口即可 相反 如果您使用 TCP 套接字接口 socket connec
  • 安装J语言的JQt IDE,出现错误

    我一直按照这里的说明进行操作 http code jsoftware com wiki System Installation Linux http code jsoftware com wiki System Installation L
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的
  • C语言中如何通过内存地址映射函数名和行号?

    如何用 GCC 中的内存地址映射回函数名称和行号 即假设一个 C 语言原型 void func Get the address of caller maybe this could be avoided MemoryAddress get
  • 为什么我可以直接从 bash 执行 JAR?

    我是一个长期从事 Java 工作的人 并且知道运行带有主类的 JAR 的方法MANIFEST MFJar 中的文件很简单 java jar theJar jar 我用它来启动 Fabric3 服务器 包含在bin server jar在其标
  • 为arm构建WebRTC

    我想为我的带有arm926ej s处理器的小机器构建webrtc 安装 depot tools 后 我执行了以下步骤 gclient config http webrtc googlecode com svn trunk gclient s
  • 在bash脚本中分割字符串[重复]

    这个问题在这里已经有答案了 我想分割一个字符串并需要其中的一些参数 USER dn uid dfl3030 cn users cn accounts dc tenant dc ycs dc io cn Reb Lena Schmidt kr
  • 在我的 index.php 中加载 CSS 和 JS 等资源时出现错误 403

    我使用的是 Linux Elementary OS 并在 opt 中安装了 lampp My CSS and JS won t load When I inspect my page through browser The console
  • 分叉/多线程进程|重击

    我想让我的代码的一部分更加高效 我正在考虑让它分叉成多个进程 并让它们一次执行 50 100 次 而不是只执行一次 例如 伪 for line in file do foo foo2 foo3 done 我希望这个 for 循环运行多次 我
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 如何使用 GOPATH 的 Samba 服务器位置?

    我正在尝试将 GOPATH 设置为共享网络文件夹 当我进入 export GOPATH smb path to shared folder I get go GOPATH entry is relative must be absolute

随机推荐

  • 如何在 Angular 中使用 Chart.js 和 ng2-charts

    介绍 Chart js是一个流行的 JavaScript 图表库ng2 charts是 Angular 2 的包装器 用于将 Chart js 集成到 Angular 中 在本教程中 您将使用 Chart js 和ng2 charts在 A
  • 将 CSV 文件读入 R 中的数据帧

    借助 R 提供的特定函数 将 CSV 文件读入数据帧要容易得多 什么是 CSV 文件 CSV 扩展为逗号 分隔 值 在此文件中 存储的值用逗号分隔 存储数据的过程要容易得多 为什么 CSV 是最常用的数据存储文件格式 将数据存储在 Exce
  • 如何在 Ubuntu 16.04 上为多个平台构建 Go 可执行文件

    介绍 The Go编程语言附带丰富的工具链 使获取包和构建可执行文件变得异常容易 Go 最强大的功能之一是能够为任何 Go 支持的外部平台交叉构建可执行文件 这使得测试和包分发变得更加容易 因为您不需要访问特定平台即可为其分发包 在本教程中
  • mongodb使用使用 SCRAM 验证客户端设置访问控制

    1 在没有访问控制的情况下启动 MongoDB 启动没有访问控制的mongodb实例 打开终端并以mongod用户身份运行以下命令 mongod port 27017 dbpath var lib mongodb 若是按照我前几篇的步骤来的
  • 贪心算法在计算机体系结构中的应用

    目录 一 前言 二 离线缓存 Offline caching 1 高速缓存技术的简要介绍 2 问题引入 3 精确问题 寻找思路 4 引入贪心算法 5 最优子结构性质的证明 1 变量准备 2 反证法证明 cut paste 法 6 递推表达式
  • 园区消防系统组成

    园区消防系统是一个关键的安全设施 它由多个组成部分构成 以确保园区内的火灾风险得到有效控制和管理 这些组成部分包括火灾报警系统 消防水系统 自动喷水灭火系统 消防通道和紧急出口等 首先 火灾报警系统是园区消防系统的核心组成部分之一 它通过安
  • 准备先敲一遍cesium源码

    由于cesium的例子中 关于shader只有后处理 对基本的单个模型和fbo都没有涉及 而目前公司没人去研究cesium源码 没办法 只能进行下去 否则 没法玩了 FBO什么的都加不上了
  • 美容院管理系统

    新经济环境下 美容院向智能互联网时代转型是大势所趋 在美容院不断拔地而起的今天 市场优胜劣汰 美容院业务范围的扩张和发展 让美容院对智能管理需求也越来越大 如 员工管理 产品管理 客户管理 订单管理 进销存管理 营销管理 报表管理等等 都向
  • 四、C语言进阶:宏定义和头文件

    4 宏定义和头文件 4 1 什么是宏定义 宏是用来表示一段代码的标识符 4 2 宏怎么用 三种用法 当作常量使用 当作函数使用 编译预处理 4 2 1 宏定义常量 预定义宏 ANSI C标准定义有些定义好的宏定义 称为预定义宏 这些宏定义以
  • 八数码深度优先搜索_程序员必知的十大基础实用算法之-DFS(深度优先搜索)...

    深度优先搜索 深度优先搜索是一种在开发爬虫早期使用较多的方法 它的目的是要达到被搜索结构的叶结点 即那些不包含任何超链的HTML文件 在一个HTML文件中 当一个超链被选择后 被链接的HTML文件将执行深度优先搜索 即在搜索其余的超链结果之
  • LoRa Mesh 自组网 采集器

    外观结构 分为主机跟从机 1个网络需要1个主机 技术参数和指标 电源 无线参数 有线参数 应用场景 无线抄表 实时监控 数据采集
  • 面向对象(OOP)的基本特征

    面向对象 OOP 的基本特征
  • 64位Windows11系统快速搭建修图神器codeformer运行环境教程详解

    前段时间发现一款低画质照片变高清图软件Codeformer引起了我极大的兴趣 经过学习 现在完全弄明白了它的安装 配置 使用方法 入坑良久 今日出坑 在这里留档备查 让我这个门外小白见识到了复杂的环境配置过程 入门深度学习首先要踩的也是必须
  • kotlin入门!万字长文轻松彻底入门Flutter,含泪整理面经

    前言 最近 有同学参加阿里云的面试 被问到 如果是MySQL引起的CPU消耗过大 你会如何优化 他说 这个问题他第一次遇到 当时一头雾水 不知道该如何回答 还好他当时机制 说MySQL底层不是他研究的重点 所以面试官没有再深入这块 因此 我
  • conda 导出环境/导入环境/导出base环境

    conda的虚拟环境真的非常实用 尤其是对于大的深度学习项目 给每个项目单独配一个环境 轻巧又容易管理 还能直接用别人配好的虚拟环境 非常方便 这里记录几个常用的导入导出命令免得每次找 查看可用环境 conda info envs 输出样式
  • 用群晖筑建音乐之「家」

    创意从业者的灵感总是随时迸发 一段简短的旋律就有可能谱成一首经典歌曲 而这个过程 不仅需要才华 学习 刻苦 还需要 方便保存所有这些灵感的 工具 群晖NAS为音乐爱好者或是音乐从业者打造私有音乐素材库 大量的音乐素材及作品都可以通过群晖NA
  • docker映射mysql修改字符编码_怎么在docker容器的mysql的编码格式变为utf8

    第一个方法 1 编辑MySql的配置文件 MySql的配置文件Windows下一般在系统目录下或者在MySql的安装目录下名字叫my ini 可以搜索 Linux下一般是 etc my cnf 在 mysqld 标签下加上以下内容 defa
  • 深拷贝浅拷贝的理解

    深拷贝 1 是指拷贝一个对象时 不仅仅把对象的引用进行复制 还把该对象引用的值也一起拷贝 2 源对象与拷贝对象互相独立 其中任何一个对象的改动都不会对另外一个对象造成影响 浅拷贝 1 指的是拷贝一个对象时 仅仅拷贝对象的引用进行拷贝 但是拷
  • “由于内部错误,服务器无法处理该请求。有关该错误的详细信息,请打开服务器上的 IncludeExceptionDetailInFaults (从 ServiceBehaviorAttribute 或从...

    WCF程序中一般出现这样的错误 我们需要在服务端的web config中增加
  • 操作系统与shell

    操作系统与shell 操作系统与shell 一 什么是操作系统 1 什么是kernel 2 什么是shell 二 System Call 补充 用户态与内核态 操作系统与shell 一 什么是操作系统 操作系统 即Operating Sys