simbafl / KernelOS

用代码描述下进程的含义

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

KernelOS

用代码描述下进程的含义

怎么看待进程

  1. 从进程的结构看: 进程是一个应用程序运行时刻的实例;
  2. 从进程的功能看: 进程是应用程序运行时所需资源的容器;
  3. 从OS对进程实现的角度来看: 进程是一堆数据结构;

进程结构设计

首先,进程是一个应用程序运行时刻的实例,它的目的就是操作系统用于管理和运行多个应用程序的; 其次,从前面我们实现的内存管理组件角度看,操作系统是给应用程序提供服务的。

所以,从这两个角度看,进程必须要有一个地址空间,这个地址空间至少包括两部分内容:一部分是内核,一部分是用户的应用程序。

表示一个进程

那么对于一个进程,它有状态,id,运行时间,优先级,应用程序栈,内核栈,机器上下文,资源描述符,地址空间,我们将这些信息组织在一起,就形成了一个进程的数据结构。

代码简单创建一个进程

简介:

  1. thread_t 结构的一个实例变量代表一个进程。
  2. thread_t 结构的地址作为进程的 ID,这个 ID 具有唯一性。
  3. thread_t表示一个线程,包括:锁【并发】、链表、进程标志、进程状态、进程编号【内存地址】、CPU编号【当前全是0】、CPU时间片、进程权限【内核or用户】、优先级【越小越高】、运行模式、栈信息【内核栈、应用栈】。
  4. 进程有 64 个优先级,td_priority 数值越小优先级越高。
  5. objnode_t 结构是一个数组,用来存储进程打开资源的描述符。
  6. CPU 在发生中断时,会根据中断门描述里的目标段选择子,进行必要的特权级切换,特权级的切换就必须要切换栈,CPU 硬件会自己把当前 rsp 寄存器保存到内部的临时寄存器 tmprsp;然后从 x64tss_t 结构体中找出对应的栈地址,装入 rsp 寄存器中;接着,再把当前的 ss、tmprsp、rflags、cs、rip,依次压入当前 rsp 指向的栈中。
  7. 不考虑线程的实现。

About

用代码描述下进程的含义


Languages

Language:C 100.0%