用代码描述下进程的含义
- 从进程的结构看: 进程是一个应用程序运行时刻的实例;
- 从进程的功能看: 进程是应用程序运行时所需资源的容器;
- 从OS对进程实现的角度来看: 进程是一堆数据结构;
首先,进程是一个应用程序运行时刻的实例,它的目的就是操作系统用于管理和运行多个应用程序的; 其次,从前面我们实现的内存管理组件角度看,操作系统是给应用程序提供服务的。
所以,从这两个角度看,进程必须要有一个地址空间,这个地址空间至少包括两部分内容:一部分是内核,一部分是用户的应用程序。
那么对于一个进程,它有状态,id,运行时间,优先级,应用程序栈,内核栈,机器上下文,资源描述符,地址空间,我们将这些信息组织在一起,就形成了一个进程的数据结构。
简介:
- thread_t 结构的一个实例变量代表一个进程。
- thread_t 结构的地址作为进程的 ID,这个 ID 具有唯一性。
- thread_t表示一个线程,包括:锁【并发】、链表、进程标志、进程状态、进程编号【内存地址】、CPU编号【当前全是0】、CPU时间片、进程权限【内核or用户】、优先级【越小越高】、运行模式、栈信息【内核栈、应用栈】。
- 进程有 64 个优先级,td_priority 数值越小优先级越高。
- objnode_t 结构是一个数组,用来存储进程打开资源的描述符。
- CPU 在发生中断时,会根据中断门描述里的目标段选择子,进行必要的特权级切换,特权级的切换就必须要切换栈,CPU 硬件会自己把当前 rsp 寄存器保存到内部的临时寄存器 tmprsp;然后从 x64tss_t 结构体中找出对应的栈地址,装入 rsp 寄存器中;接着,再把当前的 ss、tmprsp、rflags、cs、rip,依次压入当前 rsp 指向的栈中。
- 不考虑线程的实现。