从0开始linux(8)——进程(0)操作系统初识

欢迎来到博主的专栏:从0开始linux
博主ID:代码小豪


在开始讲解进程之前,博主决定先讲解一部分与操作系统相关的东西,以方便后续的进程章节,可以让读者对于进程的了解更加深入。

冯诺依曼体系结构

一个标准的冯-诺依曼体系结构如下:
在这里插入图片描述
现代的计算机依然遵守冯诺依曼体系,但是将运算器与控制集成在了一起,成为了cpu,因此现在的现在的计算机遵守的冯诺依曼体系可以简化成如下:
在这里插入图片描述
常见的输入设备有:磁盘,键盘,鼠标
常见的输出设备有:磁盘,显示器,网卡

已执行一个程序为例,我们所写好的代码,在编译形成的二进制文件是存储在磁盘当中的,当我们执行该二进制文件(即程序)时,存储器将在磁盘中读取对应二进制文件,然后输入给cpu进行运算,cpu完成运算之后返回给存储器,再由存储器将结果输出到输出设备(输出设备是什么由程序决定)中。

为什么要有操作系统

操作系统的主要功能有:

(1)进程/任务管理 (2)文件管理 (3)内存管理 (4)驱动管理

我们可以想象,如果计算机没有操作系统(在早期是这样的),我们运行一个程序,需要在磁盘中找到对应的二进制文件,然后指定一块内存去存储这个文件,再让cpu去执行,还要再找一块内存中的空间存储,然后将结果输入到输出设备中,这一切都要用户自己去规划,可想而知,这个计算机的使用门槛肯定非常高。而有了操作系统以后,我们只需要使用命令,或者鼠标双击就能运行程序了,使用非常方便。

从此可知,操作系统是一个管理计算机资源的软件

操作系统的功能

前面提到了,操作系统是一个管理计算机资源的软件,那么它是如何管理的呢?

我们的计算机总是要链接各种各样的硬件设备的,鼠标,键盘,显示器等,以鼠标为例,常见的鼠标品牌就有雷蛇,罗技,卓威。那么操作系统是怎么做到管理的呢?答案就是,操作系统不会对硬件设备直接进行管理。

比如我们突然想看电影了,我们可以用爱奇艺看,可以用腾讯视频看,也可以用bilibili看。总之,如果我们想要看电影,不需要自己去动手设计一个视频播放器来看。而将操作系统代入我们的角度也是,操作系统不需要设计程序去管理硬件设备,而是通过驱动程序去管理硬件设备,只需要让操作系统去管理驱动程序就行。而驱动程序则是由厂商提供的,有些驱动程序是预先安装的,有些驱动程序也会在硬件插入主机的时候自动安装,有时候则需要我们自己去下载对应的驱动程序。总之,操作系统是通过驱动程序来管理硬件设备。
在这里插入图片描述

所以说,当我们对电脑进行操作时,本质上是对操作系统进行操作,然后操作系统再通过驱动程序对硬件进行操作?答案是,用户并不能对操作系统进行操作。嘶,这与实际情况也不符啊,如果用户不能对操作系统进行操作,那么情况就是:用户想要打开一个进程,操作系统不打开,用户要读取磁盘数据,操作系统不读取,这不是和用户反着来吗?

现实是用户并不能直接操作操作系统,而是通过系统调用(system call)向操作系统发出请求,当我们运行一个进程时,其实是通过系统调用向操作系统发出请求,当操作系统同意后,就会将进程加入到内存当中运行。不知道大家有没有出现过这种情况,当我们同时打开多个进程时(特别是学校机房的老电脑),电脑会直接卡住,等一段时间后再将进程给我们打开。

这是由于,当我们打开多个进程时,操作系统并不会完全按照我们的要求进行,因为操作系统还要考虑到计算机是否能完全运行这些进程。如果操作系统判定无法处理这么多进程时,就会将部分进程暂停,或者等待部分进程结束,然后再将新的进程开始运行。我们也可以想象,如果用户直接对操作系统进行操作其实并不好,特别对于不熟悉计算机的人来说,比如我的妈妈使用手机时就经常将程序挂在后台,如果操作系统对我妈的指令言听计从,那么闪退,重启肯定也是经常发生的事了。

所以由此可知,操作系统并不会对用户开放,而是提供一个系统调用的接口,让用户对操作系统发送请求,然后由操作系统去执行这些请求,并对过程进行管理。
在这里插入图片描述

在linux中,这些系统调用是用c语言写的函数,我们在man手册当中可以查看,而我们在编写代码时就可以使用系统调用的函数,博主于此不多讲述,在后续的文章当中再慢慢讲解。

如何管理进程

写好的代码通过编译生成二进制文件,也就是所谓的程序,通常情况下,生成的二进制文件会和源文件在同一个路径底下,但是总而言之,二进制文件是一个文件,是一个存储在磁盘当中的文件。

当我们运行一个程序时,内存会在磁盘当中读取对应的二进制文件,内存是一个硬件,磁盘也是一个硬件,因此这个过程是一个硬件设备之间的操作,由操作系统调度。

因此我们得出一个结论,当运行一个程序时,操作系统会将磁盘当中的二进制文件拖拽到内存当中。

而操作系统也是一个软件,一个程序,当我们将电脑开机时,操作系统会自动来到内存当中,并且执行“操作系统”这一程序。

在这里插入图片描述

那么操作系统将程序从磁盘拖拽到了内存之后就撒手不管了吗?非也,操作系统不仅要管这个程序如何启动,还要管程序如何进行,最后再管程序如何结束。这个程序从开始到结束的过程就叫做进程,而操作系统管理程序的启动到结束的行为,称为进程管理。

那么操作系统是如何进行进程管理的呢?

不知道大家有没有听过这么一个很著名的话:算法+数据结构=程序。数据结构是描述对象的底层,而算法则决定了这些数据的操作逻辑。既然操作系统是一个程序,那么它肯定也设计了进程的数据结构。

在linux当中,进程被设计成了名为task_struct的结构体,意为任务的结构体,结构如下:


struct task_struct {
volatile long state; 
unsigned long flags;  
int sigpending;   
mm_segment_t addr_limit; 

volatile long need_resched;
int lock_depth;  
long nice;       
unsigned long policy;
struct mm_struct *mm; 
//源码很长,博主截取一部分
};

也就是说,linux系统将进程描述成了一个结构体,每当一个程序运行形成进程时,在linux系统当中都会记录下这个进程的状态,并且根据进程的状态来管理进程,比如进程运行状态下管理,在挂起状态下管理,在结束状态下管理。总之linux系统是通过这个task_struct来管理进程的。而至于是如何管理的,博主放在后面再说。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码小豪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值