
基础知识计算机组成运算器、存储器、控制器、输入设备、输出设备操作系统管理计算机上的软硬件资源为用户提供一个交互的接口管理操作包括进程管理、内存管理、文件管理文件系统、中断CPU:运算器控制器|AMD或intel类型wait()引用sys/wait.h头文件进程一个正在进行的程序PCB进程控制块linux中也叫进程描述符描述进程的属性信息pid整型进程编号用于区分多个进程getpid()获得自身pidgetppid()获得父进程pidfork()复制进程Linux中只能复制进程不能产生进程故除0进程外每个进程都有一个folk()一个父进程可产生多个子进程fork复制内存以页为单位复制写时拷贝修改父进程中数据时才拷贝不修改则共享提高复制效率返回值类型整型父进程返回子进程编号子进程返回0子进程从fork返回的位置开始执行逻辑地址与物理地址代码编写完成不运行就已经存在逻辑地址运行后存在物理地址逻辑地址栈帧中距离起始位置偏移量物理地址电脑内存空间例如具体的硬盘逻辑地址与物理地址理解跳舞排练时先安排每个人第几号即逻辑地址真正表演时所站的位置才是物理地址打印地址时i我们看到的打印出来的是逻辑地址最终逻辑地址会分配到内存中形成物理地址逻辑地址是连续的页分配到物理地址中可能连续可能不连续系统看到哪里的物理内存空闲就会把这个进程放到哪里。打印出来的时逻辑地址实质是两个进程内的两个成员编号逻辑地址一样n可以不一样例如两个人在两个组中编号一样都是3号但是人是不同的距离起始地址偏移量一样但物理地址内存空间不同系统为什么采用逻辑地址举例10MB大小的文件在4G的电脑可以运行在6G的电脑也可以运行不能要求一定把它放在物理地址为5G的地方因为这样的话内存为4G的电脑无法运行若说该文件放在4G的地方电脑中还有其他的程序也可能放在4G的地方如此两个程序就会冲突。所以采用逻辑地址安排各成员之间的关系最后再放到内存中。僵死进程定义子进程先于父进程结束父进程没有获取子进程的退出码。此时子进程就称为僵死进程理解子进程已经结束并返回了一个返回值但还存在一个pcb值即退出码(1字节)系统为了知道子进程是怎么结束的直到父进程执行wait()获取pcb值获取完之后才会删除这个退出码。所以退出码删除之前都还可以看到这个子进程此时这个进程处于僵死状态如果父进程比子进程先结束子进程变成孤儿进程后面会被另一个父进程以前1号进程 现在其他进程接管重新分配父进程接收退出码为什么要处理僵死进程子进程运行完处于僵死状态仍然占着一个id号多个僵死进程积累起来就会造成很大的浪费如何处理方法一父进程调用wait()获取子进程退出码或wait(NULL)直接不给空间保留退出码执行wait后子进程继续执行父进程阻塞要等子进程运行完返回退出码给wait期间父进程啥也干不了释放完所有资源方法二利用信号解决僵死进程优点可以防止父进程阻塞signal(SIGCHID,SIG_IGN)忽略子进程结束之后发出的信号仅在Linux上能实现signal(SIGCHLD,fun)在fun函数中设计wait获取子进程的退出码解决僵死进程