操作系统——进程

操作系统作为用户和内核间的桥梁,管理软硬件资源。进程是运行的程序,由PCB描述,Linux中保存在/proc下。进程有七种状态,包括运行、睡眠、死亡等,僵尸进程可能导致资源泄露。程序的地址空间是虚拟的,通过页表映射到物理内存,实现内存管理和访问控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

操作系统

首先我先谈一下我关于操作系统的理解,操作系统本身就是一个比较大的进程,他对下负责管理计算机的软硬件以及为软件提供良好的运行环境,对上和用户进行交互。

用户通过shell命令操作系统调用接口,系统调用接口又连接着操作接口,操作接口下则是驱动软件,驱动软件负责调用系统的各种硬件。

所谓的操作系统,就是用户和内核之间的一层壳,因为用户直接使用内核可能会发生各种不可预料的事情,这才有了操作系统。

进程

那么,什么是进程呢?

首先,我们写的程序不是进程,只有当程序运行起来的时候,他才是进程,所以说,进程就是运行起来的程序;

对于用户来说,进程就是运行的程序,那么站在操作系统的角度来说,进程就是对于这个进程的描述;

这个描述是个结构体,就叫PCB( task_struct );

当一个程序运行起来的时候,就是cpu把这段程序加载到内存中来,并赋予他一个唯一的标识符 PID ,并且将它所需要的一些资源进行描述,这就是所谓的PCB;

Linux中,所有的进程都被保存在  /proc 目录下,我们可是使用指令  ps aux 来查看所有的进程,还可以使用 ps -ef 来查看进程的相关信息。

进程状态

进程是有状态的,在Linux中,进程共有七种状态

(1)R运行状态(runing):并不意味着进程一定在运行中,也可以在运行队列里;
(2)S睡眠状态(sleeping):进程在等待事件完成;(浅度睡眠,可以被唤醒)
(3)D磁盘睡眠状态(Disk sleep):不可中断睡眠(深度睡眠,不可以被唤醒,通常在磁盘写入时发生)
(4)T停止状态(stopped):可以通过发送SIGSTOP信号给进程来停止进程,可以发送SIGCONT信号让进程继续运行
(5)X死亡状态(dead):该状态是返回状态,在任务列表中看不到;
(6)Z僵尸状态(zombie):子进程退出,父进程还在运行,但是父进程没有读到子进程的退出状态,子进程进入僵尸状态;
(7)t追踪停止状态(trancing stop)

对于其中,我们要重点关注僵尸进程!!!

因为他会造成严重的危害,资源泄露;

僵尸,不死不灭,就连神通广大的 kill -9 对此也无能为力,因为谁都不能杀死一个已经死亡的进程,当子进程先于父进程退出时,子进程需要告知父进程自己退出的原因,但是父进程没有理会,于是操作系统就只能一直维护着子进程的 pcb ,这段空间也就没办法释放了;

那么僵尸进程如何避免呢?

一般,为了防止产生僵尸进程,在fork子进程之后我们都要wait它们;同时,当子进程退出的时候,内核都会给父进程一个SIGCHLD信号,所以我们可以建立一个捕获SIGCHLD信号的信号处理函数,在函数体中调用wait(或waitpid),就可以清理退出的子进程以达到防止僵尸进程的目的。最好是使用waitpid,因为假如有五个子进程同时结束,所有信号都在信号处理函数执行之前产生,而信号处理函数只执行一次,因为Unix信号一般是不排队的,而且信号处理函数执行的次数并不确定;所以最好使用waitpid去处理僵尸进程。

程序的地址空间

(程序是我们写的代码文件,并没有内存地址,只有一个程序运行起来成为进程,这时候才会占有内存,才有进程的地址空间,

每个进程都有自己的进程地址空间:我们的程序一旦生成完毕,那么他的地址就固定了,运行时候就需要一块完整连续的内存,但是如果程序使用连续的物理内存,内存的利用率就太低,因此:

操作系统就为每个进程都画了一个饼,也就是说为每个进程都虚拟了一个完整的连续的地址空间,但是这些地址都是虚拟的,并不是物理内存的地址,而虚拟地址经过页表映射之后他们每个变量的真正物理内存地址有可能不连续的,通过这种方式来充分利用我们的物理内存

页表:操作系统为每个进程都会创建一个页表来映射虚拟地址和物理地址的转换关系,

同时页表还有一个很重要的功能:内存访问控制

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值