Linux-进程概念(1)
文章目录
- 本节重点(10-1.38.00)
- 冯诺依曼体系结构
- 数据流动的本质
- 为什么会存在内存呢?
- 理解数据流动
- 操作系统(Operator System)
- 1. 概念
- 2. 设计OS的目的
- 3. 知识点
- 理解操作系统
- 如何理解管理
本节重点(10-1.38.00)
- 认识冯诺依曼系统
- 操作系统概念与定位,
理解管理
→很重要 - 深⼊理解进程概念,了解
PCB
- 学习进程状态,学会创建进程,掌握僵⼫进程和孤⼉进程,及其形成原因和危害
- 了解进程调度,
Linux
进程优先级,理解进程竞争性与独⽴性,理解并⾏与并发 - 理解进程切换,以及
Linux2.6 kernel
,O(1)调度算法架构 - 理解环境变量,熟悉常⻅环境变量及相关指令,
getenv/setenv
函数 - 理解C内存空间分配规律,了解进程内存映像和应⽤程序区别,认识虚拟地址空间
冯诺依曼体系结构
- 将输入设备与输出设备称为
外设
输入设备
:键盘,鼠标,话筒,摄像头,网卡,磁盘…输出设备
:显示器,磁盘,网卡,打印机…- 中央处理器(
CPU
)= 运算器 + 控制器 存储器
:内存
数据流动的本质
- 将磁盘称为
外存
,在外存和内存上会进行IO流操作(Input/Output
) - C++中进行文件的读取,读文件就是将磁盘里的数据读到内存里,写文件就是将内存里的数据写到磁盘上,将这种读写的操作就称为IO。
- 目前谈硬件,所以咱现在站在内存角度理解IO,你是内存,外设将数据交给你(I),你将处理过的数据交给外设(O)
- 用一个问题作为引子:软件运行,必须先加载到内存中(为什么→
体系结构规定
),那程序运行之前在哪里呢?在磁盘中(程序其实就是一个文件) - 数据流动的本质:数据是从一个设备拷贝到另外一个设备上
- 软件加载到内存中,就是执行
Input
操作,软件文件从磁盘中拷贝到内存中,因此体系结构的效率:由设备的拷贝效率决定 - 所谓软件运行就是
CPU
执行我们的代码,访问我们的数据,而CPU
获取,写入数据,只能从内存中来进行 CPU
在数据层面,只和内存打交道。外设只和内存打交道
为什么会存在内存呢?
可不可以直接将内存给减去,直接让
CPU
处理数据,再将处理过的数据拷贝到输出设备上,这样难到不是更加方便快捷
首先输入和输出设备都是外设,它的运算效率特别低,假设它们的运算效率是
ms
级别的,但CPU
是纳秒级别的, 那就CPU
数据处理完了(它非常快),还得等输入设备给数据(你却非常慢),这样整个计算机效率就以外设拷贝效率的级别来决定了(可以参考木桶原理)
下面的层级是距离
CPU
的远近,层级越高,则距离CPU
越近,拷贝效率也越高
- 那是不是可以将输入和输出设备全部用寄存器处理数据,是可以,但花费特别大
- 而有了内存的存在,将来输入设备的数据放在存储器(内存)中(如何提前由操作系统决定),再由
CPU
去处理数据,就可以用内存来对CPU
和外设速度不匹配作一定的适配 - 这样可以让我们花少量的钱获得一台效率不错的计算机,要明白的一点是:当代计算机是性价比的产物
- 其实冯诺依曼体系的历史意义在于:它是构建互联网的必要条件(便宜了,大家都能买的起电脑了,这是最主要的)
- 那为啥有了内存后,输出效率就高了呢?最短的木板不依旧是输入设备吗?这是因为操作系统的缘故,它会将数据从输入设备提前搬到内存中
理解数据流动
下面是北京的一位用户在QQ上给南京的朋友发消息聊天,通过下面这副图片来理解数据流动
- 所有的软件本质上都是处理中央处理器和内存之间的关系
- 站在硬件角度上,聊天是把数据从用户键盘经过冯诺依曼体系结构转发到对方显示器的工作,发送文件本质上是将文件从本地磁盘经过体系结构拷贝到对方磁盘上(就是两台体系结构之间的交互)
操作系统(Operator System)
1. 概念
- 任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)
- 操作系统自己就是一款软件,狭义上的操作系统就是一个内核,广义上的操作系统还包括其他程序
- 内核(进程管理,内存管理,⽂件管理,驱动管理)
- 其他程序(例如函数库,shell程序等等)
2. 设计OS的目的
- 对下,与硬件交互,管理所有的软硬件资源→
不是目的,而是手段
- 对上,为用户程序(应⽤程序)提供⼀个良好的执行环境→
目的
- 这下面及之后的操作系统不加说明就指的是狭义上的操作系统
3. 知识点
1. 软硬件体系结构呈层状结构
- 软件层状结构本质是在软件工程上体现出高内聚,低耦合的
高内聚
:就是将相同功能,相同逻辑的代码与数据放在同一层内部低耦合
:就是层与层之间本身只使用一些接口的方式进行互相调用,最终还是方便代码后续的可维护性(每个模块的代码是独立开来的,并没有混在一起)- C++中的继承不就是一个层状结构(父亲和子类不就是单独的一层吗)
- 这样做的好处是,当我们以后要去改操作系统时,驱动程序及其它的都不用随之变化,单独改一层结构,也不影响其它层
- 而且不仅在软件上是高内聚和低耦合的,在硬件设计上也是同样如此,比如台式机上的网卡,显卡,键盘,显示器等等都是可以自主去更换和组装的
- 整个计算机世界都是高内聚和低耦合的
2. 访问操作系统,必须使用系统调用→其实就是函数,只不过是系统提供的
- 理论上要懂操作系统才能将系统调用接口运用得更好,比如通过
printf
函数往显示器上进行打印,它的本质是你把你的数据写到了显示器这个硬件上,是你写的C程序直接写到了对应的硬件上吗? - 压根不是,其实整个计算机体系(无论是
Linux
还是Windows
)结构都是层状的,用户做开发,用C
标准库中的方法,最终写到了硬件上,这是客观事实 - 但实际上是不可能绕过操作系统直接到达硬件上的,本质上
printf
这个库函数底层一定要去封装系统调用接口再通过操作系统,一层一层的往下访问,把数据交到硬件手上 - 这就是为什么,我们的程序,只要你判断出它访问了硬件,那么它必须贯穿整个软硬件体系结构
3. 库可能在底层封装了系统调用
所以咱们平时所做的所有操作,指令操作,开发操作,管理操作等全部都得经由应用程序转换成对应的系统调用接口访问操作系统
理解操作系统
在整个计算机软硬件架构中,操作系统的定位是:⼀款纯正的“
搞管理
”的软件
如何理解管理
- 这里举个例子来对管理进行说明:校长(操作系统),辅导员(驱动程序),学生(底层硬件)。校长是
管理者
,学生是被管理者
- 管理者是如何管理被管理者的呢?其实就是根据被管理者身上的数据进行管理。
- 比如学校要举办一个篮球队,要找几十个人,难道校长一间宿舍一间宿舍的找人吗?不需要,校长只需要通过学生体测表,查看每个人的身体素质,直接做出决策,就能直接入选
- 那管理者和被管理者不需要去见面,管理者是如何得到数据的呢?由辅导员-中间层帮我们获取
- 下面这幅图片最重要的就是那六个字:
先描述,再组织
。先描述类似于C++
中的类,再组织类似于STL
容器