进程概念:冯诺依曼体系结构 / 操作系统基本认识 / 进程概念 / 进程状态 / 环境变量 / 程序地址空间
一、冯诺依曼体系结构
现代计算机硬件体系结构
我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。
五大硬件单元:
- 输入设备
- 输出设备
- 存储器
- 运算器
- 控制器
所有设备都是围绕存储器工作的——硬件结构决定了软件行为
二、操作系统
概念
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:
- 内核(进程管理,内存管理,文件管理,驱动管理)
- 其他程序(例如函数库,shell程序等等)
定位
- 一款纯正的“高管理”的软件-----管理着计算机上的软硬件资源
管理
- 先描述(用struct结构体),再组织(用链表或其他高效的数据结构)
库函数和系统调用接口的关系:库函数封装了系统调用接口
三、进程概念
基本概念
- 进程是什么?-----运行中的程序
在操作系统中的进程:
- 进程就是pcb,是一个运行中程序的描述,通过描述信息中的内存指针能够找到内存中运行的程序代码以及数据,并且通过上下文数据可以保存程序调度切换时正在处理的数据,以及通过程序计数器保存进程切换时程序即将执行的下一步指令,等等…通过这些描述信息实现控制一个程序的运行,因此对于操作系统来说进程就是pcb。
- 进程在操作系统中是调度切换运行的,每个进程都有一个cpu时间片(一个进程在cpu上的运行时间段),在cpu上事件篇运行完毕后则切换到下一个进程———cpu的分时机制
进程的创建以及查看 - ps -ef/-aux
四、进程状态
运行态R / 可中断休眠态S / 不可中断休眠态D / 停止态T / 僵死态Z
僵死态
-
僵尸进程—处于僵死态的进程—进程已经退出,但是资源没有完全释放
-
僵尸进程的产生原因: 子进程先于父进程退出,退出后,为了保存自身的退出原因(返回值),因此资源没有完全释放,操作系统这时候通知父进程获取子进程的退出状态,并允许操作系统释放资源,但是若父进程没有关注这个退出状态,则子进程虽然退出了,但是资源没有完全释放,处于僵死状态,称为僵尸进程。
-
僵尸进程的危害:资源泄露
孤儿进程
- 父进程先于子进程退出,子进程则称为孤儿进程,运行在系统后台,并且被1号init进程收养。
进程优先级
- 决定进程cpu调度优先权的级别—让操作系统更加的运行良好
- 批处理程序/交互式程序
- cpu密集型程序/IO密集型程序
五、环境变量
- 环境变量:用于存储系统运行环境参数的变量—是系统的参数配置更加灵活
- 额外作用:向进程传递参数
操作命令:
- env:查看所有环境变量
- echo:打印指定环境变量的内容
- set:查看shell中所有变量信息
- export:设置一个环境变量
- unset:删除一个变量
代码中对环境变量的操作
- main函数第三个参数—保存所有的环境变量
- extern char **environ;全局变量
- char *getenv(const char *name)—通过环境变量名称获取内容
六、程序地址空间
内存地址:内存区域的编号
- 每个进程都有一个自己的进程地址空间
- 创建子进程—父子进程代码共享,数据都有
- 我们在进程中所访问到的地址实际都是一个虚拟地址‘
- 程序地址空间->进程地址空间->虚拟地址空间
虚拟地址空间:
通过一个结构体描述出一块完整的连续的线性的地址空间
size/code_start/code_end/data_start/data_end
mm_struct 结构体—内存描述符
- 直接使用物理内存:内存利用率低,缺乏内存访问控制
- 操作系统通过虚拟地址空间向进程描述了一个完整的连续的虚拟地址空间,供进程使用,但是在物理内存中进程数据的存储采用离散式存储(提高内存利用率),并且使用页表映射虚拟地址与物理地址的映射关系,并且在页表中可以实现内存访问控制(标志位表示内存的访问权限);
- 如何通过虚拟地址得到物理地址:分段式内存管理 / 分页式内存管理 / 段页式内存管理