进程概念
冯诺依曼体系结构大多数的计算机、服务器等都遵循冯诺依曼体系结构
操作系统概念操作系统实质上是一款专门搞管理的软件。操作系统包括内核(进程管理、文件管理、驱动管理)和其他程序(库函数、shell程序等)进程控制块PCBPCB:为了便于系统描述和管理进程的运行,内核为每个进程专门创建的一个结构体对象。(一个PCB对应一个进程)PCB是进程实体的一部分,用于存储进程所需的所有信息。CPU在执行进程时,是找的PCB,再通过PCB去调用程序代码和数据。Linux中PCB的结构体是 struct task_struct{ }系统中PCB是采用双链表的形式链接起来的。
例如:当前进程被打断,去执行另一个进程,当另一个进程执行完后要如何回到之前进程被打断的位置呢?上下文数据就是用来保存这类数据。上下文数据是保存在PCB中的。IO状态信息查看存储进程信息的文件进程信息可以通过 /proc 系统文件夹查看(文件夹的名称就是该进程的PID)
进程状态进程的5种状态就绪态R :等待被运行。(等待CPU调度)运行态R :正在运行。(占用CPU)(运行态包含就绪态,所以运行态可以同时有多个))僵尸态Z :父进程还在运行,子进程结束还未被回收时,子进程相关信息任然被保存着。
进程地址空间注意:进程地址空间不是实际的物理内存,而是映射出的虚拟地址(不同进程的虚拟地址是相同的,但是实际映射的物理内存是不同的地址)每个进程都有自己的进程地址空间和对应的页表(用于表示映射关系)进程地址空间实质是物理内存中的一种内核数据结构(mm_struct)
使用进程地址空间的优势避免了野指针的出现(野指针在页表中没有映射)避免系统级别的越界访问,页表只会映射当前进程的物理内存,不会映射到其他地址。统一进程的排布,即所有进程在进程地址空间中排布方式都是相同的,并且空间范围也是相同的。每个进程都相当于独立出来的,更好的实现进程独立及合理使用内存空间。
存储器用于快慢设备之间的缓冲作用,提高系统的效率(内存可以预先装载数据)
处理数据时,必须先将数据预装载到内存中(一次性装载多条数据,由操作系统完成)在硬件和数据层面上:CPU只和内存进行交流,外设也只与内存进行交流。寄存器不仅只存在于CPU中,其他的外设中也存在。各硬件之间是用总线进行链接(IO总线、系统总线)操作系统概念操作系统实质上是一款专门搞管理的软件。操作系统包括内核(进程管理、文件管理、驱动管理)和其他程序(库函数、shell程序等)进程控制块PCBPCB:为了便于系统描述和管理进程的运行,内核为每个进程专门创建的一个结构体对象。(一个PCB对应一个进程)PCB是进程实体的一部分,用于存储进程所需的所有信息。CPU在执行进程时,是找的PCB,再通过PCB去调用程序代码和数据。Linux中PCB的结构体是 struct task_struct{ }系统中PCB是采用双链表的形式链接起来的。
PCB主要存储的信息:
标示符:描述此进程的唯一标示符,用于区分其他进程(PID等)状态:休眠状态S、运行状态R如果进程是前台运行时,则会标识为 R+如果进程是后台运行时,则会标识为 R优先级程序计数器(PC指针):保存程序中即将被执行的下一条指令的地址。内存指针:程序代码和进程相关的数据指针,和其他进程共享的内存块指针上下文数据:进程执行时处理器的寄存器中的数据。
例如:当前进程被打断,去执行另一个进程,当另一个进程执行完后要如何回到之前进程被打断的位置呢?上下文数据就是用来保存这类数据。上下文数据是保存在PCB中的。IO状态信息查看存储进程信息的文件进程信息可以通过 /proc 系统文件夹查看(文件夹的名称就是该进程的PID)
进程状态进程的5种状态就绪态R :等待被运行。(等待CPU调度)运行态R :正在运行。(占用CPU)(运行态包含就绪态,所以运行态可以同时有多个))僵尸态Z :父进程还在运行,子进程结束还未被回收时,子进程相关信息任然被保存着。
等待态(休眠态)(浅度睡眠 & 深度睡眠):等待一定条件进入就绪态,等待态下即使给它CPU也无法运行。
浅度睡眠S:等待时可以被唤醒(即使没有等到某个条件,收到信号也可以被唤醒)深度睡眠D:等待时已经不能被唤醒了,只有等到某个条件才能自动唤醒(收到信号也不能被唤醒),并且该进程不能被杀死,即使是操作系统也不行。停止态T :进程只是被暂时停止了,还是可以恢复的(不是进程结束了)死亡态X :进程死亡,这个状态只是一个返回状态,任务列表中是看不到这个状态的。僵尸进程子进程先于父进程结束。子进程已经结束了,但是父进程还未帮子进程收尸(即父进程没有读取到子进程退出时返回的代码),这一个子进程就被称为僵尸进程。回收僵尸子进程方法一:
父进程可以通过使用wait或waitpid来显示回收子进程,并且获取子进程退出的状态。回收僵尸子进程方法二:
父进程自己结束时,会自动回收子进程的资源。孤儿进程父进程先于子进程结束,此时子进程就变成了孤儿进程。Linux系统规定:所有的孤儿进程都自动成为一个特殊进程(进程1,也就是init进程)的子进程。进程优先级优先级的计算Linux中可以使用 ps -la 显示系统进程PID和优先级Linux中实际优先级 = PRI + NI (在执行这个算法时,PRI一直都是最初始的优先级)
PRI 代表这个进程的优先级,值越小越先执行。NI 代表这个进程的 nice 值(它是优先级的修正值,取值范围 -20 ~ 19,默认为0)所以调整进程优先级是调整 nice 值。优先级的更改终端中使用命令 sudo top 进入更改状态进入top后按 r 进入输入状态输入进程PID 然后回车再输入新的 nice 值即可进程相关性质竞争性:CPU资源很少,而进程较多,所以进程之间是具有竞争性的,为了高效完成任务,合理分配资源,于是有了优先级。独立性:多进程运行是相互独立的,独享各种资源,进程之间互不干扰。并行:多个进程在多个CPU下同时运行。并发:多个进程在同一个CPU下采用进程切换的方式,让多进程在宏观上实现同时运行。环境变量环境变量实质就是一个系统级别的全局变量。PATH:指定命令的默认搜索路径将路径导入PATH环境变量: echo PATH=$PATH: 路径HOME:指定用户的主工作目录(即用户登录到Linux时进入的默认目录)环境变量相关命令echo $环境变量 (查询相关环境变量)(echo $? 返回最近一次程序执行后的返回值)env (显示所有环境变量)unset (删除环境变量)set (显示本地定义的 shell 变量和环境变量)(本地变量只在本进程中有效)export (导入新的全局的环境变量)main函数带的参数(argv、argv、envp)argc:命令行参数个数argv:命令行参数列表envp:环境变量进程地址空间注意:进程地址空间不是实际的物理内存,而是映射出的虚拟地址(不同进程的虚拟地址是相同的,但是实际映射的物理内存是不同的地址)每个进程都有自己的进程地址空间和对应的页表(用于表示映射关系)进程地址空间实质是物理内存中的一种内核数据结构(mm_struct)
使用进程地址空间的优势避免了野指针的出现(野指针在页表中没有映射)避免系统级别的越界访问,页表只会映射当前进程的物理内存,不会映射到其他地址。统一进程的排布,即所有进程在进程地址空间中排布方式都是相同的,并且空间范围也是相同的。每个进程都相当于独立出来的,更好的实现进程独立及合理使用内存空间。
版权声明
本文仅代表作者观点,不代表博信信息网立场。