🐳
uCore OS(on RISC-V64)实验指导书
  • Introduction
  • LAB0:ready~go!
    • 实验目的
    • 实验内容
    • 前导知识
      • 了解uCore
      • 了解RISC-V
      • 了解OS实验
      • 了解实验环境
      • 了解开发调试基本工具
      • 了解硬件模拟器
    • 配置环境
      • 安装虚拟环境
      • 安装开发工具
      • 安装硬件模拟器
      • 安装调试工具
  • LAB0.5:最小可执行内核
    • 实验目的
    • 实验内容
    • 练习
    • 内存布局
    • 链接脚本
    • 真正的入口点
    • 从SBI到stdio
    • 编译运行
    • 项目组成与执行流
  • LAB1:中断机制
    • 实验目的
    • 实验内容
    • 练习
    • RISC-V中断相关
    • 上下文处理
    • 中断处理程序
    • 时钟中断
    • 项目组成与执行流
  • LAB2:物理内存管理
    • 实验目的
    • 实验内容
    • 练习
    • 地址与页表
    • 物理内存探测
    • 以页为单位管理物理内存
    • 页面分配算法
    • 项目组成与执行流
  • LAB3:虚拟内存管理
    • 实验目的
    • 实验内容
    • 练习
    • 页面置换
    • PageFault
    • 使用多级页表
    • 页面置换机制
    • FIFO置换算法
    • 项目组成与执行流
  • LAB4:进程管理
    • 实验目的
    • 实验内容
    • 练习
    • 进程与线程
    • 相关结构体
    • 进程模块初始化
    • 进程切换
    • 项目组成与执行流
  • LAB5:用户程序
    • 实验目的
    • 实验内容
    • 练习
    • 用户进程
    • 用户程序
    • 创建并执行用户进程
    • 系统调用
    • 用户进程的退出和等待
    • 项目组成与执行流
  • LAB6:进程调度
    • 实验目的
    • 实验内容
    • 练习
    • 进程状态
    • 再次认识进程切换
    • 调度算法框架
    • 项目组成与执行流
  • LAB7:同步互斥
    • 实验目的
    • 实验内容
    • 练习
    • 同步互斥的基本概念
    • 信号量
    • 条件变量与管程
    • 项目组成与执行流
  • LAB8:文件系统
    • 实验目的
    • 实验内容
    • 练习
    • 文件系统介绍
    • 文件系统抽象层VFS
    • 硬盘文件系统SFS
    • 设备即文件
    • 从中断到终端
    • 项目组成与执行流
由 GitBook 提供支持
在本页
  • 进程与线程
  • 为什么需要进程

这有帮助吗?

  1. LAB4:进程管理

进程与线程

进程与线程

在操作系统中,我们经常谈到的两个概念就是进程与线程的概念。这两个概念虽然有许多相似的地方,但也有很多的不同。

我们平时编写的源代码,经过编译器编译就变成了可执行文件,我们管这一类文件叫做程序。而当一个程序被用户或操作系统启动,分配资源,装载进内存开始执行后,它就成为了一个进程。进程与程序之间最大的不同在于进程是一个“正在运行”的实体,而程序只是一个不动的文件。进程包含程序的内容,也就是它的静态的代码部分,也包括一些在运行时在可以体现出来的信息,比如堆栈,寄存器等数据,这些组成了进程“正在运行”的特性。

如果我们只关注于那些“正在运行”的部分,我们就从进程当中剥离出来了线程。一个进程可以对应一个线程,也可以对应很多线程。这些线程之间往往具有相同的代码,共享一块内存,但是却有不同的CPU执行状态。相比于线程,进程更多的作为一个资源管理的实体(因为操作系统分配网络等资源时往往是基于进程的),这样线程就作为可以被调度的最小单元,给了调度器更多的调度可能。

为什么需要进程

进程的一个重要特点在于其可以调度。在我们操作系统启动的时候,操作系统相当是一个初始的进程。之后,操作系统会创建不同的进程负责不同的任务。用户可以通过命令行启动进程,从而使用计算机。想想如果没有进程会怎么样?所有的代码可能需要在操作系统编译的时候就打包在一块,安装软件将变成一件非常难的事情,这显然对于用户使用计算机是不利的。

另一方面,从2000年开始,CPU越来越多的使用多核心的设计。这主要是因为芯片设计师们发现在一个核心上提高主频变得越来越难(这其中有许多原因,相信组成原理课上已经有过介绍),所以采用多个核心,将利用多核性能的任务交给了程序员。在这种环境下,操作系统也需要进行相应的调整,以适应这种多核的趋势。使用进程的概念有助于各个进程同时的利用CPU的各个核心,这是单进程系统往往做不到的。

但是,多进程的引入其实远早于多核心处理器。在计算机的远古时代,存在许多“巨无霸”计算机。但是,如果只让这些计算机服务于一个用户,有时候又有点浪费。有没有可能让一个计算机服务于多个用户呢(哪怕只有一个核心)?分时操作系统解决了这个问题,就是通过时间片轮转的方法使得多个用户可以“同时”使用计算资源。这个时候,引入进程的概念,成为操作系统调度的单元就显得十分必要了。

综合以上可以看出,操作系统的确离不开进程管理。在下一节,我们会介绍ucore中与进程相关的数据结构,看一看如果定义一个进程。

上一页练习下一页相关结构体

最后更新于4年前

这有帮助吗?