OS Design and Implementation读书笔记(2)

系统调用(在MINIX3中):
在这里插入图片描述进程相关:
1,fork()。创建一个原进程的副本进程。原进程与新进程中的内容完全相同,但各自执行互不相关。fork函数有返回值,返回值为0时当前进程为子进程,返回值为一个正整数(为子进程的标识号PID)时当前进程为父进程。

2,waitpid()。该系统调用使父进程阻塞,直到子进程结束。waitpid函数有3个参数。
若第一个参数设置为-1,waitpid函数等待某个特定的子进程。
第二个参数statloc指向的是子进程的返回值

3,execve()。使得子进程必须执行当前的用户命令。
函数有三个参数:待执行文件名,指向参数数组的指针,指向环境数组的指针

举例:shell的运行( C语言 )

#define TRUE 1

while(TRUE){
	type_prompt();                /*在屏幕上显示提示符*/
	read_command(command, parameters); /*从终端读取输入*/

	if(fork != 0)                /*如果是子进程*/
		waitpid(-1, &status, 0); /*阻塞父进程*/
	else                       /*如果是父进程*/
		execve(command, parameters, 0); /*执行命令*/
}

4,sbrk()。改变进程的数据段的大小。函数唯一一个参数为数据段的增加字节数(负数时为减少字节数),类比malloc动态申请内存函数函数

进程分为三段,代码段和数据段从下到上增长,栈段从上到下增长,中间的区域为空闲区。


信号相关:

|| 例如用户对正在运行的编辑器按下看CTRL + C,就是向进程发送了一个终止的信号

1,sigaction()。对于尚未声明愿意接受信号的进程来说,若它接受到了一个信号,那么进程就会被杀死,因此我们会使用sigaction函数来声明进程将准备接收信号。
调用完sigaction函数以后,进程可接收信号,并进行相应的信号处理程序
该函数有2个参数,一个是信号处理程序的地址,一个是原先信号处理程序的地址

2,sigreturn()。信号处理结束后,调用sigreturn函数,将返回到原来被此次信号打断的指令继续向下执行。

3,sigprocmask()。信号也是可以被阻塞的,被阻塞的进程会一直挂起,即不传递也不丢失直到阻塞解除。我们使用sigprocmask允许进程定义一组被阻塞的信号集

4,sigsuspend()。允许进程将阻塞的信号挂起

4,sigsuspend()。进程使用该函数查询因阻塞而挂起的信号集

发布了34 篇原创文章 · 获赞 66 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/a13352912632/article/details/104381398
今日推荐