目录
1.所有的数据采用二进制的存储
2.数据存储在内存中
CPU处理器只做俩种运算:逻辑&&算数运算
操作系统内核(本质上就是某种代码的统称)+应用,操作系统的本质也是软件
- 组织+描述
描述:struct task struct {}
组织:双向链表
在此还需要知道的一个常识:CPU(中央处理器)的数量远小于进程数。进程是需要等待操作系统分配CPU资源运行。
- 进程状态
- 运行态:进程已得到系统分配的cpu资源,正在执行计算
- 就绪态:进程基础准备完成,等待操作系统分配cpu
- 阻塞态:进程缺乏某种资源无法分配到cpu资源,导致进程不能被执行
- 进程状态细分
R 进程正在执行 S 进程暂时处于休眠状态(可打断) D 进程暂时处于休眠状态(不可被打断) T 进程中断 X 死亡状态 t 跟踪状态,当进程被gbd调试时,就会产生该状态
- 仔细说明死亡状态不能被肉眼查询的原因:
死亡状态,ps,aux是查不到该进程信息的,该进程当要被释放时,释放的前一刻进程状态标记为死亡状态,ps,aux能查进程信息全凭进程的组织双向链表,遍历该链表由此查看进程
进程是由操作系统管理的,程序运行起来叫做进程
程序的本质为一个文件,当程序跑起来时就叫做进程,这是一个动态的,由操作系统管理,操作系统分配cpu资源对进程进行一个管理
每一个进程都有属于自己的“身份证号”pid,在当前操作系统中,每一个进程都有一个具有唯一性的pid号,进程的观察需要使进程运行起来,查看进程信息命令:Ps,aux查看当前进程的信息
fork函数的返回值三种类型
<0 fork函数创建失败 ==0 返回给子进程 >0 返回父进程 父子进程跑不一样的代码就需要if分支来实现 fork的返回类型pid_t(本质是整形)
- Getpid函数,谁调用就返回谁的PID
- Getppid:谁调用就返回谁的父进程PID
- 俩个kill命令:
.Kill [pid]:
.Kill -9 [pid]: 强杀命令
Z表示僵尸状态
- 僵尸进程产生的原因?
父进程创建一个子进程,子进程先父进程退出,子进程在退出时向父进程发送信号(SIGCHLD),但父进程对该信号忽略处理,导致子进程在退出时,没有进程回收子进程的资源导致子进程变成了僵尸进程
- 僵尸进程有什么危害?
僵尸进程在内核中的task_struct结构体并没有被释放,导致内存泄露,并且强杀命令也不能干掉
- 如何解决?
重启系统
进程等待
让僵尸进程成为孤儿进程(杀掉僵尸进程的父进程),继而僵尸进程就会被1号进程收养,最后1号进程会回收它的资源
- 孤儿进程如何产生?
父进程比子进程先退出,则子进程就是孤儿进程
儿进程:父进程变成1号进程,当子进程的父进程先与子进程先退出时,子进程会被1号进程所收养,1号进程也叫init进程,操作系统启动的第一个进程叫做1号进程
这样就可以解决僵尸进程,把僵尸进程的父进程干掉,僵尸进程就会被1号进程收养,回收它的资源
孤儿进程被领养后就变成了一个后台进程