🌈个人主页:羽晨同学
💫个人格言:“成为自己未来的主人~”
这篇文章,我们主要分析一下进程。
之前,我们讲过了冯诺依曼体系架构, 我们常见的计算机,像笔记本,或者不常见的计算机,像服务器,大部分都遵守冯诺依曼体系。
截止目前,我们所认识的计算机,都是又一个一个的硬件组件组成的。
主要包括三个部分:
输入单元、中央处理器、输出单元
关于冯诺依曼结构,我们需要知道的有几点:
- 这里的存储器指的是内存
- 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
- 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取
- 一句话,所有设备都只能和内存打交道
操作系统
什么事操作系统
我们这里主要讲三个部分,分别是什么是操作系统,为什么要有操作系统,以及操作系统是怎么样工作的。
首先,什么是操作系统:
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。这个是官方的解释
那什么是操作系统呢?
操作系统其实就是一个管家,他可以帮助你完成好你想做的事情。
由于操作系统大部分写的时候都是使用的C语言,少部分使用的汇编,汇编的作用主要是开机的时候识别操作系统。
每一种硬件的底层都需要对应的驱动程序,因为并不是操作系统直接访问的。驱动程序就像是操作系统伸出的触手一样,可以帮助操作系统更好的管理硬件,这个驱动程序要么是操作系统自带的,要么是对应的硬件所要下载的。
操作系统的作用
那为什么需要有操作系统呢?
- 对下管理好软硬件资源,对上提供良好的用户体验
- 对下要进行软硬件管理,保证底层稳定,高效,安全,能进行良好的工作
- 对上提供一个稳定、高效、安全的运行环境
操作系统是怎么样进行管理的
其实,管理的本质是对数据进行管理。
就像你的老板,就像校长,是可以通过各种各样的数据来了解你的具体情况,从而可以对你进行管理。
而在这个其中,是存在着一个中间人的角色的。
中间人的作用是,对上获取数据,对下执行决策工作。这个中间人,就是操作系统。
那,这个是怎么样进行管理呢?
比如说你的校长,是怎么样通过数据来了解你呢?,这个时候就存在着一个结构体,比如说
struct student
{
名字
性别
成绩
struct student*next;
}
通过这个结构体组成的单链表就可以实现对于数据的控制。
对学生的管理,变成了对链表的管理,转化成了计算机的语言。
在管理者层面上,我们对所有被管理对象,构成节点,把所有的节点按照链表的形式连接起来。
那,相对应的,操作系统是如何管理硬件的呢?
在操作系统内部封装了一个结构体
通过链表连接,形成了一张,device_list
struct device
{
//name
//status
//id
}
所以,我们在操作系统内部,看到的将全是链表,这个就是所谓的先描述,再组织,我们先对每个的性质进行描述,然后将每个节点连接起来。
任何计算机语言,都遵循先描述,再组织
所以,为什么现在所有的主流面向对象语言,都要提供面向对象的,标准库。
因为语言的本质是为了对各种对象进行管理,所以要有各种各样的管理工具,而语言中的面向对象,实质上是提供先描述的能力,而语言中的各种库,提供的是在组织的能力。
而操作系统的操作,其实都是对于数据结构的增删查改。
所以,我们其实可以想到,一定是现有的操作系统,再有的C语言。
那么,为什么会有数据结构呢?
最开始只有语言和操作系统,随着软件越来越大,写任何软件,都需要先描述再组织,进行组织的学科就叫做数据结构。
那么,为什么主流是面向对象呢?
面向对象其实就是怎么把一个对象描述起来,用语言进行先描述,提供各种各样描述的能力。
在银行当中,其实也是这个样子,银行本身就是一个系统,他有仓库,有收钱的地方等等。
而在银行当中,也存在着一个职位,叫做维护人员,他们负责维护底层的设备,使得底层的设备正常的运转,这个其实就像是操作系统当中的驱动程序,使得底层的硬件能够正常的运行。
而对于银行来说,银行系统是不相信任何人的,但是又要对外提供服务,所以,银行设置了各种各样的窗口,这个是银行开放的表现,对于操作系统来说,肯定也是不能随意的让用户修改自身的数据的,所以,它也把自己封闭起来,并且,它也提供了各种各样的对外的接口(系统调用),这种接口都是C语言式的接口,因为操作系统就是由C语言写的,所以对于C/C++,可以直接的使用系统调用。
比如说,我们向显示器进行打印,本质是对硬件进行写入,但是是不能直接写入了,而是通过系统调用。
对于系统调用来说,只要系统调用时C语言的接口,注定了所有软件的底层,都与C/C++有关。
而在银行当中,来的用户肯定也存在那种不识字的人,对于这种人,使用窗口的成本也很高,这个时候,就存在着另外一种岗位,叫做大堂经理。这个大堂经理,就像是操作系统当中的服务层,库。
系统调用接口,需要对系统有着一定的了解,对于一般的程序员来说,使用起来是比较麻烦的,所以我们封装成了库,直接使用库就可以了,比如说(C语言库,C++库),比如说,printf和scanf,还有图形化界面。
安卓的底层是Linux(内核)
什么叫做进程
操作系统是一个软件,所以开机后第一个加载的,就是操作系统。
操作系统最核心的工作就是进行进程管理,操作系统管理进程依靠的是进程的属性数据,在操作系统当中,加载一个进行,不止加载可执行程序到内存,还要加载进程的属性(这个叫做PCB,也可以说叫做task_struct)
struct task_struct
{
int pid;
int status;
int prio;
void* memptr;
.....
struct task_struct*nexr;
}
操作系统是如何对进程进行管理的呢?
先描述,再组织,先定义成某种结构体,在系统层面上进程的属性,结构体里面也有某种链接字段
对进程的管理,也就是对某种数据结构的管理。
所以说,其实什么叫做进程呢?
进程就是内核数据结构+程序的代码和数据
调度运行的时候,进程呈现出了动态的特征(被os调用,运行),从CPU上拿下来,拿上去。所以进程就像是运行起来的程序。
那为什么要有PCB呢?
因为操作系统要管理进程,可能存在多个进程,所以要先描述,在组织。
好了,本次的文章就到这里了,我们下次再见。