L8&9&10 【哈工大_操作系统】CPU管理的直观想法&多进程图像&用户级线程

L2.1 CPU管理的直观想法

管理CPU -> 引出多进程视图

  1. 设置 PC 指针初值为程序在内存中开始的地址,自动取指执行
  2. 多个程序同时放在内存中,让CPU交替执行(并发:程序在读I/O时太慢,CPU空闲,则会去执行其他程序,不断来回切换)
  3. 引出进程概念:即运行中的程序

L2.2 多进程图像

操作系统的核心图像

PCB(process control block): 用来记录进程信息的数据结构

  1. 多进程组织:用PCB记录进程信息,用状态推进进程运行

  2. 多进程地址空间分离:内存管理(映射表,映射到物理地址是不同位置)

  3. 多进程同步:上锁

1、多进程的切换

复制代码
schedule();     // 进程交替
// schedule 展开
schedule() {
	pNew = getNext(ReadyQueue);  // 调度,就绪队列找到下一个进程的PCB
	switch_to(pCur, PNew);       // 切换,当前进程PCB保存并切换到下一个进程
}

L2.3 用户级线程

1、线程和进程的关系

  • 进程:进程是操作系统中资源分配的基本单位 ,进程的切换涉及到指令执行序列 和资源的切换,每个进程都有自己的资源。
  • 线程:线程是操作系统中CPU调度的基本单位 ,一个进程可以有多个线程,线程切换只涉及指令执行序列的切换,每个线程共享资源

线程保留了并发的优点,避免了进程切换代价太大。进程里面可以启动多个指令序列(线程)。每个线程共用一个映射表,共享内存,只切换程序,不切换资源

2、线程的切换

  1. 一个线程一个栈(两个栈)、一个TCB,TCB记录栈指针位置
  2. 介绍 Yield() 运行时切换栈和弹栈获取返回位置
  3. 引出 ThreadCreate() 流程:申请TCB、申请栈、栈保存初始位置、栈和TCB关联

总结:用 ThreadCreate() 创建一堆线程,每个线程有自己的函数,在线程中调用 Yield() 来跳转、释放CPU,让CPU在多个线程之间切换。

核心级线程:会进入内核,TCB在内核中,并发性更好。当一个线程阻塞时,能够看到其他线程。(比如用户级线程,如果获取网页数据的网卡卡了,CPU将切换到其他进程,不会运行该进程中的其他线程(比如从缓存中已下载的拿一些进行显示),此时浏览器将一片黑)

相关推荐
青梅味猪大肠15 小时前
【操作系统-60】临近适应算法
java·linux·开发语言·嵌入式硬件·算法·操作系统
PMAOS4 天前
4G 功能机操作系统选型指南:KaiOS、Mocor、MAUI、PMAOS 的能力边界与验证方法
嵌入式硬件·ai·操作系统
罗四强4 天前
第10篇:打包上架:签名、打包 HAP、发布到华为应用市场
分布式·操作系统·harmonyos·arkts·鸿蒙系统
Liaiyang665 天前
空圈容错视角-HarmonyOS 7 架构体检:从被动容错到主动免疫的真伪验证与生态反推
操作系统·harmonyos·架构设计·ai-agent·端云协同·鸿蒙7·空圈容错
OpenAnolis小助手6 天前
龙蜥社区亮相 GOSIM AI Vision Forum 共话“Agentic Native”开源新
人工智能·ai·开源·操作系统·龙蜥社区·agent
阿里云基础软件6 天前
Agent 任务提速 10.71%,内存占用降低 21.60%|Alibaba Cloud Linux 4 重大发布
java·linux·人工智能·操作系统·agent
OpenAnolis小助手7 天前
多租户公有云共享 CXL 内存池场景下的内存卸载研究
人工智能·操作系统·龙蜥社区·risc-v·agentic os
OpenAnolis小助手9 天前
PHP 两个严重漏洞曝光,龙蜥社区 24 小时完成 3 版本修复
开发语言·操作系统·php·龙蜥社区
硅基手札10 天前
操作系统设计思想系列 13 · NuttX 深度 — POSIX 飞控底座 + RTOS 群像
架构·操作系统·嵌入式开发·ecos·sel4·nuttx
2CM_Embed11 天前
μC/OS-II 任务管理详解(三):任务创建、任务栈、删除、优先级修改与挂起恢复
操作系统