进程与程序
学习目标:
- 了解进程相关概念
- 了解虚拟内存和物理内存映射关系
- 了解pcb进程控制块
- 掌握fork函数
进程相关概念:
- 进程和程序
- 程序:指编译好的二进制文件,保存在磁盘上,不占用系统资源
- 进程:是活跃的程序,占用系统资源,在内存中执行。
- 同一个程序可以加载为不同的进程。
- 并发
- 在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
- 单道程序设计
- 在计算机内存中只允许一个程序运行
- 多道程序设计
- 在计算机内存中同时存放几道相互独立的程序,在管理程序控制下,相互穿插运行,共享系统资源。
虚拟内存和物理内存映射关系:
在32位操作系统中,每个进程都有独立的4G(2^32)字节的虚拟内存空间,其中0 ~ 3G为用户空间,3G ~ 4G为内核空间。
- 虚拟内存
- 所有的进程共享一块物理内存。
- MMU完成虚拟内存与物理内存间的映射
- 通过页表来记录哪些地址空间上的数据在物理内存上,以页(4096字节)为单位。
- 用户空间不能直接访问内核空间,MMU把内存分级(Linux只有个两级,0级和3级),MMU通过权级切换来间接的与内核交互。
PCB进程控制块:
PCB进程控制块:为了描述控制进程的运行,系统中存放进程的管理和控制信息的数据结构称为进程控制块
- PCB包括
- 进程ID:唯一的,每个进程都包含一个PID。
- 文件描述符。
- 进程状态:初始态、就绪态、运行态、挂起态、终止态。
- 进程工作目录位置
- umask掩码:文件权限掩码。
- 信号相关信息资源。
- 用户id和组id。
fork函数:
fork函数:将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。
pid_t fork(void);
创建子进程,父子进程各自返回。父进程返回子进程pid,子进程返回0。
pid_t getpid(void);
pid_t getppid(void);
获取进程id和父进程id。