程序代码成为文本段(代码段)。进程除了代码段之外还包括当前2活动,通过程序计数器的值和处理器寄存器的内容来表示,进程还包括堆栈段和数据段,以及堆(heap)是进程运行期间动态分配的内存
程序本身不是进程:程序只是被动实体,而进程是活动实体,有一个程序计数器来表示下一个要执行的命令和相关资源集合。装载可执行文件通常有两种方式:1. 双击可执行文件的图标或是在内存中输入该文件的文件名
进程状态:
- 新的:进程正在被创建
- 运行:指令正在被执行
- 等待:进程等待某个事件的发生(如IO完成或收到信号)
- 就绪:进程等待分配处理器
- 终止:进程完成执行
进程控制块:
每个进程在操作系统内使用进程控制块(Process Control Block,PCB)来表示。
进程状态:状态包括…
程序计数器:计数器表示进程要执行的下个指令的地址
CPU寄存器:啊哈
CPU调度信息:包括优先级、调度队列的指针和其他调度参数
内存管理信息:基址和界限寄存器的值、页表和段表
记账信息:包括CPU时间、实际使用时间、时间界限、记账数据、作业或进程数量
I/O状态信息:包括分配给进程的I/O设备列表、打开的文件列表
因此PCB是这些信息的仓库,进程间和进程间是不同的
进程调度
进程进入系统时,就会加入作业队列中,该队列中包括系统中的所有进程。驻留在内存中就绪的、等待的进程保存在就绪队列中。该队列通常用链表实现,其头节点指向链表的第一个和最后一个PCB块的指针。每个PCB包括一个指向就绪队列的下一个PCB的指针域。
Linux中的进程表示,是通过C结构的task_struct来表示的:
pid_t pid; //process identifier
long state; //state of the process
unsigned int time; //scheduling information
struct files_sturct *files; //list of open files
struct mm_struct *mm; //address space of this process