当前位置: 首页 > Linux

进程概念

时间:2023-04-07 00:54:21 Linux

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