学习笔记6
第三章.Unix/Linux进程管理
多任务处理:
指的是同时几项独立活动的能力
是所有操作系统的基础,是并行编程的基础
进程的概念:
进程是对映像的执行
在操作系统中,每个进程用一个独立的数据结构表示,叫进程控制块(PCB)和任务控制块(TCB)。本书中称为PROC
typedef struct proc{
struct proc *next; //下一个PROC结构体的指针
int *kcp; //保存的堆栈指针
int pid; //进程ID编号
int ppid; //父进程的ID编号
int status; //当前状态
int priority; //进程调度优先级
int kstack[1024]; //进程执行时的堆栈
}PROC;
进程同步
是指控制和协调进程交互以确保其正确执行所需的各项规则和机制
睡眠模式/等待:ksleep(int event)
唤醒操作:kwakeup(event)
进程终止:
分为正常终止和异常终止
进程家族树:
PROC *child,*sibling,*parent;
子进程,兄弟进程,父进程
等待子进程终止:
无论何时,进程都能调用内核函数kwait等待僵尸子进程
pid = kwait(int *status)
进程管理中的系统调用:fork()、wait()、exec()、exit()
fork():
Usage:int pid = fork();
fork创建子进程并返回子进程的pid,失败则返回-1。
I/O重定向
sh进程有三个用于终端I/O的文件流:stdin(标准输入)、stdout(标准输出)、stderr(标准错误)。
I/O重定向允许我们更改输出地点和输入来源。
重定向符 “>>” 、“>” 操作符
管道
| 前一个命令的输出作为后一个命令的输入
管道是用于进程交换的单项进程间通信通道,有一个读取端和写入端
int pd[2]; //array of 2 integers
int r = pipe(pd); //成功返回0