Linux复习(第二节课)__2018.07.24

用户态:执行用户代码的时候处于用户态

内核态:执行内核代码的时候处于内核态

系统调用就是执行系统的代码,处于内核态。

0x80号中断(系统调用),产生中断,内核处理中断。

用户访问不了内核的代码,它只是告诉内核自己要干什么,由内核完成具体操作。

《Linux内核设计与实现》第五章。

系统调用处于系统和硬件之间。

系统调用的开销是很大的。尽量减少系统调用的次数。

int main(int argc,char *argv[],char *env[]);//参数个数  参数内容  环境变量

无名管道  只能在父子进程间通信    半双工  写入管道的数据都在内存中

有名管道  可以在任意两个进程间通信  (为了解决无名管道的缺陷)

管道是一个流式的数据,一段写一段读。

系统调用:signal、kill的功能。

signal()  改变信号的相应方式

kill()  发送信号

实现:在pcb中定义一个长整形的数据,收到哪一个信心就把哪一位置为1,默认为0

fork()复制的时候,先为子进程申请一个pid,然后把pcb复制一份,将pcb的中的进程号改为子进程的pid,然后是进程实体的复制(写时拷贝)。

僵死进程:子进程先于父进程结束,父进程没有调用wait获取子进程的退出码,子进程就变成僵死进程。

父进程调用wait,Linux中让它忽略掉SIGCHLD信号,可以达到处理僵死进程的目的。

虚拟内存,不是真实的物理内存,只是磁盘上划分的一段空间(Linux上的swap分区)当作内存来用,物理内存不足时可以把一些物理页框换出去,放在交换分区。

意义:可以使系统运行比当前物理内存还大的应用程序。

申请1.9G的内存。

关闭系统的交换分区:#swapoff -a

fork底层的实现都是调用do_fork()

先为进程获取一个pid,再调用复制进程实体 的函数。

对传进来的标志位,进行检查,看有没有冲突。

系统会先缓存好多pcb的镜像,用的时候,直接拿出来就行了。

PCB:task_struct

tsk:pcb的指针。

你这样讲,主干思路就不清晰了。

初始化结构体。

在内核中打开了一个文件。

内核中的数据结构。

pcb里面是一大堆的指针。

将页设为只读,当要对该页进行写操作时,就会产生异常。

PGD:全局页目录。

mmstruct:内存描述符。

内核栈(thread_info):4K或8K

用了父进程的内核栈信息初始化了子进程的栈信息,所以子进程是接着父进程执行的位置继续执行,fork返回的值是0(eax),

PCB=》进程实体=》父进程的内核栈初始化子进程的内核栈

子进程的返回值是0;主干流程理清楚。

把fork和系统调用的切换过程整理一下,主干思路理清楚。

猜你喜欢

转载自blog.csdn.net/weixin_40316053/article/details/81184638
今日推荐