操作系统(一)——进程

前言

近期看了几本关于Linux的书籍,打算再重温一下APUE(《Unix环境高级编程》),需要写几篇文章沉淀一下之前看过的记录自己的理解。其实我对Linux系统(或者说操作系统)最感兴趣的部分还是如何执行程序,进程间如何进行调度(进程也成为任务,下文的伪代码中用task来表示跟进程相关的结构)。
这一系列的第一篇就写写自己对进程的理解吧,由于存在一些理解上的偏差,文章描述可能有误,还请指正。

进程初始化

我们告诉操作系统我们要执行程序A和程序B,于是操作系统从硬盘里边把程序A跟程序B读出来,并初始化,最终放入调度队列,整个初始化进程的流程如图1所示:

图1 进程初始化

在初始化进程的内容之前,需要把进程的状态先设置成TASK_UNINTERRUPTIBLE,表示这个进程还不能被唤醒跟不能被调度,在设置完之后把进程状态设置成就绪状态TASK_RUNNING,此时的进程就具备了运行的条件,但是具体能不能运行还得看之后的调度程序是否选择它来运行。
[Read more...]