操作系统之进程(一)

进程是对正在运行中的程序的一个抽象,是具有一定独立功能的程序关于某个数据集合的一次运行活动,它是进行系统资源分配、调度的一个独立单位。每个进程占有虚拟地址和页表。

一、进程的管理

可以用链接方式或者索引方式对PCB(系统为描述和控制进程的运行而为每个进程定义的一个数据结构,记录了操作系统所需关于进程全部的描述和控制信息)进行组织  。链接方式就是把PCB组织成各种队列:就绪队列 阻塞队列等等,索引方式就是用索引表的方式对PCB进行组织:就绪索引表 阻塞索引表等等。在 Linux 中,PCB 是一个名为 task_struct 的结构体,称为任务结构体。记录了比如进程的状态和标志等等信息。
内核空间设置了一个指针数组 task[],该数组的每一个元素指向一个任务结构体,所以 task 数组又称 task 向量。Task 数组的大小决定了系统中容纳进程最大数量,默认值被定义为 512。 task[]数组的第一个指针指向名为 init_task 的结构体,它是系统初始化进程 init 的任务结构体。
为了记录系统中实际存在的进程数,系统定义了一个全局变量 nr_tasks,其值随系统中存在的进程数目而变化。Linux 中把所有进程的任务结构相互连成一个双向循环链表,其首结点就是 init 的任务结构体 init_task。这个双向链表是通过任务结构体中的两个成员指针相互链接而成:
Struct task_struct *next_task;/*指向后一个任务结构体的指针*/
Struct task_struct *prev_task;/*指向前一个任务结构体的指针*/

操作系统之进程(一)_第1张图片

二、进程的创建

系统初始化(init):

启动操作系统时,通常会创建若干个进程。其中有些是前台进程(numerous processes),也就是同用户进行交互并替他们完成工作的进程。进程运行在后台用来处理 e-mail,web 网页,新闻,打印等等称为 守护进程(daemons)。在 UNIX 中ps 可列出正在运行的进程, Windows 中可以使用任务管理器。

正在运行的程序执行了创建进程的系统调用(比如 fork);用户请求创建一个新进程;初始化一个批处理工作。

在 UNIX 中,用fork来创建一个新的进程。这个调用会创建一个与调用进程相关的副本。在 fork 后,一个父进程和子进程会有相同的内存映像,相同的环境字符串和相同的打开文件。通常子进程会执行 execve 或者一个简单的系统调用来改变内存映像并

你可能感兴趣的:(操作系统,多进程,后端,c++,linux)