目录二、进程
一、冯诺依曼体系 (一)冯诺依曼体系结构
(二)冯诺依曼体系结构特点
1、由输入设备、输出设备、运算器、存储器、控制器5部分组成;
2、程序和数据必须以二进制的形式不加区分的存放在存储器当中,存放在存储器的哪个位置由存储器决定;
3、计算机在工作时能自动从存储器中取出指令并执行
二、进程 (一)概念
1、进程:程序的一个具体执行实例,正在运行的程序;进程是操作系统分配资源的基本单位和最小单位;每个进程都有自己独立的地址空间和运行状态;
2、进程和程序的区别:
(1)进程是程序的一次动态执行过程;(2)程序是静态的,进程是动态的;(3)进程的生命周期相对短暂,程序相对永久;(4)进程有PCB,存储着进程的所有信息;(5)一个程序可以对应多个进程,一个进程只能对应一个程序;
(二)进程PCB
一个进程的所有的信息都是由进程PCB来存储的,各个进程之间用双向链表连接在一起,在Linux中用 这样一个结构体来存储的;
struct task_struct{//进程编号//父进程编号//进程状态//打开文件的相关信息//进程之间通信的信息struct task_struct* next;//下一个进程struct task_struct* prev;//上一个进程mm_struct* mm;//内存分配……};
进程中的信息存储在虚拟地址空间的各个内存段中,上面的结构体中的mmap就是来管理各个内存段的参数,各内存段信息用双向链表进行链接;
文章插图
(三)进程的状态
1、进程的七种状态
在Linux中,进程有七种状态
2、僵尸态
概念:僵尸态是指当一个进程非正常死亡,而父进程未回收,则该进程就处于僵尸状态;处在僵尸态的进程基本所有的资源都会释放,只留下一个进程PCB,死而不僵,即为僵尸态;
危害:当一个进程处于僵尸态时,就会产生内存泄漏;
孤儿进程:孤儿进程是指当子进程进入僵尸态,此时父进程退出,则该处于僵尸态的子进程即为孤儿进程;
3、查看进程状态
Linux中用ps aux查看进程所处的状态
R:(可运行(就绪)和正在运行的)运行态(内核、用户)S:可中断睡眠状态s:会话组长D:不可中断睡眠状态Z:僵尸态+:前台进程;没有则为后台进程l :多线程程序<:比默认的优先级高N:比默认的优先级低
3、调整进程优先级
在进程调度时我们可以调整进程的优先级以达到我们所需要的目的:
(1)调整未运行进程——nice
在进程启动前输入:nice -n -5 sleep 200
文章插图
这样一个sleep进程就改变了其优先级;
(2)调整正在进行的进程——
正在运行的sleep进程输入: -n -5 -p 3443
(四)进程PID
每一个进程都会有一个自己的编号,这个编号就叫该进程的pid,会存储在该进程自己的PCB中;同时每个进程都会有又一个父进程,该进程的PCB中也会存储父进程的pid,叫做ppid;
在打开Linux操作系统的时候,会启动一个0号进程,该进程启动了1号2号进程,而后,0号进程就负责交换内存和swap,所以0号进程是所有进程的祖先;
(五)进程PCB在物理存储空间的映射
上面我们了解了进程PCB在虚拟地址空间的存储,但是在虚拟地址空间毕竟是我们认为虚构出来的,真正的存储是在物理存储空间进行存储,这里就需要将虚拟地址空间映射到物理存储空间上,而映射的中介就是通过页表这一机制;
页表将按顺序存放的虚拟地址空间的各个内存块映射到物理内存中,这里注意映射到的物理内存时并不是像虚拟地址空间内一样按照顺序存放的,而是乱序存放的;
页表不仅有虚拟到物理的映射,还存有该进程的读写权限;
在映射的时候,因为计算机的物理内存有限,并不能将每一个存在的进程都映射到内存中,所以就有了这样一个机制:让当前正在使用和未来将要使用的虚拟地址空间映射到内存中,其余的则存放到磁盘的交换分区中(swap),等需要时,再拖到内存中;
【进程控制——进程概述】至此,从一个程序的开始到产生一个进程,再到该进程的存储就可以有一个很清晰的框架:
- Linux Tcp通信——服务器与客户端
- 利用原生JS写成小游戏——欢乐水果机
- APK瘦身——更全面的方案
- 四 Java自学笔记——Java流程控制选择结构——Switch多选择结构
- 进程控制——进程创建、退出、回收
- 三 Java自学笔记——Java流程控制选择结构——if 、switch 选择
- 1 Python可视化——用pyqt5实现一个操作pdf的小程序GUI
- 二 C++入门基础语法——引用
- 链表——双向循环链表
- 进程控制——进程替换、模拟shell