微企点做的网站怎么去底下的,保定网站设计制作需要多少钱,网站建设相关的书籍,大连品牌网站建设公司Linux 进程概念 硬件理解冯 诺依曼体系结构五大组成部件强调存储 引子操作系统#xff08;Operator System#xff09;概念作用认识为什么要有操作系统#xff1f; 结构 示意图理解操作系统system call库函数概念 进程什么是进程概念误区认识 描述进程 - PCBtask_struct - P… Linux 进程概念 硬件理解冯 诺依曼体系结构五大组成部件强调存储 引子操作系统Operator System概念作用认识为什么要有操作系统 结构 示意图理解操作系统system call库函数概念 进程什么是进程概念误区认识 描述进程 - PCBtask_struct - PCB 的一种进程动态运行 学习 进程 是在理解 操作系统概念和管理 的基础之上的所以前面使用大篇幅来讲讲 硬件 和 操作系统 是必要的最好不要跳过
硬件理解
学习 操作系统 绕不开硬件想要更深层次理解 操作系统必须理解硬件的运行过程接下来会首先介绍 冯 诺依曼体系结构
冯 诺依曼体系结构
传统意义上的计算机 非常简单因为我们的大脑没有计算机效率高所以我们会将要计算输入的数据送给计算机计算机再给出我们想要的答案
但生产效率仍然有限因为需要的不仅是计算数据还要很多功能诸如观影存储游戏网络……
所以一个计算机注定由很多硬件构成比如键盘鼠标显示器网卡显卡CPU主板内存……
而 这些硬件必须按照一定规则组装在一起才能工作 。我们常见的计算机如笔记本我们不常见的计算机如服务器大部分都遵守 冯 诺依曼体系结构它在我们 传统意义上的计算机 里新增了 存储器
五大组成部件
冯 诺依曼体系结构 的 五大组成部件
存储器指的是主存内存运算器中央处理器芯片 CPU 运算组件控制器中央处理器芯片 CPU 控制组件输入设备键盘鼠标摄像头话筒磁盘网卡……输出设备显示器声卡磁盘网卡……
强调
以上的组成部件并非独立而是要用线连接起来才能工作所以 设备之间是互相连接的而设备可组装也就可拆卸数据是要在计算机的体系结构中流动的流动过程中进行加工处理 所以数据从一个设备到另一个设备的 流动本质 是一种 拷贝 数据在计算机中的处理无非就是两种情况计算 和 流动中的拷贝 而 CPU 的运算效率极快所以 计算机整机的基本效率取决于数据在设备间拷贝的效率
存储
拥有存储功能的部件有很多但存数据是为了有朝一日可以拿出来而 存取快慢 就是极大的讨论课题
而距离 CPU 越近的 存储器效率越高成本越高容量也越小
如果没有 存储器显然 CPU 要直接和 输入输出设备 打交道而 输入输出设备 的速度对于 CPU 而言太慢CPU 大部分时间不是在算而是在等所以 添加存储器是为了提高整机效率此后 CPU 只要和 存储器 打交道CPU 运算的同时 存储器 在做数据流动的拷贝时间重叠效率提高
所以有了以下 认知
不考虑缓存情况 CPU 能且只能对 内存 进行读写不能访问外设输入或输出设备外设输入或输出设备要输入或者输出数据也只能写入 内存 或者从 内存 中读取所有设备都只能直接和 内存 打交道 所以 冯 诺依曼体系结构 就能解决如下问题
为什么 二进制可执行程序 要事先加载到 内存 中 首先 二进制可执行程序 是存放在 硬盘 上的数据要想被执行肯定需要 CPU 的参与而硬盘 作为外设并不能被 CPU 直接访问而所有设备都只能直接和 内存 打交道所以必须要将程序相关数据事先加载到 内存 中 QQ 聊天过程中的 数据流动过程 不管是你还是你朋友的电脑都符合 冯 诺依曼体系结构 那么根据上一个问题的解答二者利用 QQ 聊天时电脑会先将 QQ 加载到 内存 中此时一切就绪 如果是 聊天信息 “出来玩”且是你发信息给你的好友那你电脑的 输入设备 就是 键盘这条消息会先被送进 内存 因为 QQ 是被加载在 内存 中接下来再送进 CPU CPU 会将你的聊天信息进行加密压缩完事后再送回 内存再刷新到你设备的 网卡 上输出设备通过网络传进你好友设备的 网卡 上 输入设备 此时也会将加密压缩的数据送进你好友设备的 内存再送给 CPU 解密读取完事后再送回 内存刷新到你好友的 屏幕 上输出设备被他看见如果是 文件 是一样的流动过程只是 输入输出设备 不一样罢了
引子
上面说的轻松呀事先将数据加载到 内存 的过程中 CPU 会帮忙搬运吗
并不会CPU 是指挥官不可能做这种 “脏活” 那数据的流动过程谁来拷贝拷贝到 内存 的什么位置内存 不足了怎么办数据又什么时候从 内存 调度做计算计算完又怎么被响应什么时候再写回 内存 而后又把数据刷新出去
上面一系列问题 硬件 能决定吗? 不能
是操作系统
操作系统Operator System
概念 任何 计算机系统 都包含一个基本的程序集合称为操作系统Operator System 首先得理解 操作系统Operator System 是一款 软件 而且基本上是计算机启动后的第一个软件计算机刚开机加载的东西就是 操作系统
作用
进行软硬件资源管理
举例子
硬件 当你在电脑上插 U 盘后硬件也识别到这个部件后转而 操作系统 也会识别到此 U 盘因为 操作系统 可以管理硬件的接入和使用情况未来不想使用时当你选择弹出后操作系统 也会帮你安全弹出 软件 我们可以对电脑上的软件进行下载使用卸载等等这些操作我们只要进行点击而软件周期背后的一切都是 操作系统 在管理
认识
广义上 就是 操作系统 内核 操作系统 外壳周边程序
内核 包括但不限于进程管理内存管理文件管理驱动管理外壳周边程序 包括但不限于函数库 shell 程序等等是给用户提供使用 操作系统 的方式再比如图形化界面各种窗口等等
狭义上 就只是 操作系统 内核
而我们平时要调用 C 语言的 printf() 或者是 scanf() 都是在 访问外设 的行为对于 操作系统 而言允许用户直接越过它 访问外设 吗不可能数据出错怎么办数据丢失怎么办 操作系统 还怎么管理所以你以为的所有 访问外设 的行为都是绕不开 操作系统 的操作系统 不点头你就访问不了外设
为什么要有操作系统
这个很好解释请问一个学校里为什么要有一套完整的领导班子很显然如果没有一个学校怎么会被更好的管理起来所以 在整个计算机软硬件架构中操作系统的定位是 一款纯正的“搞管理”的软件被管理的对象就是软硬件资源而 管理 只是手段目的是为用户提供一个良好稳定安全高效的运行环境
结构 示意图 理解操作系统
我们已经知道 操作系统 是专门 搞管理的软件管理软硬件资源但究竟是如何管理鼠标键盘这些实物组件设备的呢
首先管理任何事物在本质上只是管理这些事物的属性数据如果要管理公司里的人事作为老板你会一个一个的去认识它们吗根本不会可能压根不会见面那么 操作系统 只是作为软件它凭什么能管理硬件本质上就是在管理这些硬件的数据
那 操作系统 又真的能管理这些硬件的所有数据吗换言之作为老板你会将你公司员工的所有数据都收集到吗你顶多只能收集管理员工的基本信息和与公司相关联的数据员工是否上厕所老板管得着吗 所以操作系统收集的是能够准确描述这个硬件的数据罢了包括但不限于状态来源厂商类型等等这些 属性 数据对于每一个硬件都是存在的于是对计算机而言就建模起来了就是 结构体类管理这些硬件就是管理这些 结构体在操作系统内部会将各种不同的硬件数据进行记录保存管理
收集到这些数据操作系统 会一个一个的管理这些 结构体类 吗可以但太低效我们可以 使用更高级更高效的数据结构来组织管理这些结构体例如链表顺序表堆等等
所以在计算机世界里像 管理 这种技术活一定是对被管理的对象进行 先描述建模再组织高效数据结构
system call
从上面的 结构示意图 可看出这是一个 系统调用接口 的软件层
在开发角度操作系统对外会表现为一个整体但是会暴露自己的部分接口供上层开发使用这部分由操作系统提供的接口叫做 系统调用
我们已经知道要访问外设绕不开 操作系统而大量外设硬件的数据结构也都在 操作系统 里那我们直接访问使用 操作系统 不就是在使用外设硬件了吗
不可以操作系统内核是不允许任何人来访问的如果是因为你的操作不当导致外设信息错乱系统信息有误对于 操作系统 来说是致命的为了保证系统稳定安全高效的前提下还能 提供用户想要的数据 操作系统 就提供了一系列接口你要做什么什么时候做对谁做无非就是 选择合适的接口为其传参 罢了
库函数概念
系统调用 在使用上功能比较基础对用户的要求相对也比较高所以有心的开发者可以对部分系统调用进行适度封装从而形成库有了 库 就很有利于更上层用户或者开发者进行二次开发
进程
还是要再补充一遍上面所说的内容并非空穴来风理解好 操作系统 才能更好学习 进程
什么是进程
这个比较抽象先放一张图 这不是应用软件吗是但它们都是以 进程 的形式跑在我们的电脑上
那这么说在 操作系统 上可以 同时存在很多 进程 它们也都可以被启动运行终止等等
咱先不说 进程 的概念如果在 操作系统 上要跑很多 进程那么 进程 就需要被 操作系统 管理起来如何管理先描述再组织
概念 程序的一个执行实例正在执行的程序等 担当分配系统资源CPU时间内存的实体这是内核观点 也就是说当我们 正在运行 某个应用程序或 正在运行 自己写出来的代码程序后它们就已经成为 操作系统 上的一个 进程 正是因为它是 进程才会被 操作系统 和 CPU 去调度运行
误区
不知道上面的 进程概念 大家看懂了没有但我相信大家还是没有理解什么是 进程 因为这里有个误区
当程序源文件被加载到 内存 里后就已经是一个 进程 了吗
若存在程序 A 程序 A 源文件原本是在 磁盘硬盘 上的要想被运行就得先将 A 的代码和数据加载到 内存 中如果现在 被加载的 A 的代码和数据可以被叫做 进程那 内存 里有很多已经被加载到 内存 中的程序它们又都是 进程 吗
如果 A 程序已然是 进程那 操作系统 作为管理软硬件资源的老大应该知道
当前 A 这个 进程 已经累计被调度多长时间在内存里 代码部分 是从哪开始到哪结束数据部分 是从哪开始到哪结束A 程序堆空间在哪栈空间在哪凭什么 A 程序得先被执行而不是别的程序若现在不执行 A 程序什么时候又可以执行呢是被执行中还是其他状态
很显然如果只是 将 A 程序的代码和数据加载到 内存 中操作系统 并不知道上面关于 A 的信息所以不好意思只是在 内存 里的程序还不是 进程 只是此进程对应的代码和数据
为什么敢这么说因为 操作系统 是要管理 进程 的
认识
首先请问 操作系统 是如何管理 进程 的先描述再组织
操作系统 要想描述每一个 进程肯定要先建模所以每一个 进程 都会有自己的 结构体类 里面包含了 进程 的所有属性 内存指针指向此进程对应的代码和数据 等等这个 结构体类 的名字就是 PCB
每一个 进程 都有一个自己的 PCB
此时 操作系统 已经完成对 进程 的描述如何组织 数据结构 链表数组树等等哪个高效用哪个
那么从此刻开始操作系统 对 进程 的管理就转化为 对选择的数据结构做增删查改
结论 进程 PCB 此进程对应的代码和数据
描述进程 - PCB 进程信息被放在一个叫做进程控制块的数据结构中可以理解为进程属性的集合 PCBprocess control block Linux 操作系统下的 PCB 是: task_struct 简单来说就是 描述一个进程的结构体 而 结构体连同组织它们的数据结构 被称之为 内核数据结构
其实 操作系统 也是软件开机的时候就会先将 操作系统 二进制文件加载 内存 中而前面所提到的管理 进程 的结构体和数据结构都是在 操作系统内部 的
当开启一个 进程会在 操作系统内部 malloc 一个结构体 PCB 达到管理这个 PCB 从而管理这个 进程 的效果
所以为什么要有 PCB 因为 操作系统 要管理先描述再组织
task_struct - PCB 的一种
在 Linux 中描述 进程 的结构体叫做 task_struct task_struct 是 Linux 内核的一种数据结构它会被装载到 RAM内存里并且包含着 进程 的信息
进程动态运行
在 OS 里进程 会有不同的状态执行等待等等但 OS 要调度运行 进程本质上就是让 task_struct 在 OS 里进行排队不同的队列就能让 进程 访问不同的资源
当这个 进程节点 被调度时频繁的被更改到其他队列里也就是所谓的 进程动态运行