Lecture 4: Processes 1

MIT深度学习实战路径:从课程作业到工业级AI工程能力 深度学习不仅是模型架构与训练流程,更是一套融合理论推导、底层源码理解、硬件协同优化与生产环境约束的系统性工程能力。其核心原理在于通过严格的工程实现反向锚定理论边界,例如用自定义门控单元重写强制深挖RNN梯度流,或借FlashAttention-2的block-level kernel重构理解数值稳定性与内存带宽的本质权衡。这种能力带来显著技术价值:提升模型压缩精度、加速大模型推理、支撑分布式训练落地。典型应用场景包括法律文书摘要优化、车载立体视觉深度估计、LLM服务API部署等。本文聚焦MIT公开课程体系中 阅读详情

回顾:

  1. 内核模式代码比用户模式代码拥有更多的权限
  2. 中断改变了调用内核代码的执行流程
  3. 系统调用允许我们运行内核代码来访问操作系统的服务

本章小结:

  • 介绍进程及其实现

  • 进程状态和状态转换

  • 进程管理的系统调用

进程介绍

定义

进程(process)是程序运行实例的抽象

  • 程序(program)是被动的,“位于”磁盘上
  • 进程(process)具有与其相关联的控制结构,可能是活动的,并且可能有分配给它的资源(例如I/O设备、内存、处理器)。

管理进程所需的所有信息都由内核存储在进程控制块(process control block, PCB)中。
所有的进程控制块都记录在进程表中。

进程的内存映像

一个进程的内存映像包含:

  • 程序代码(可以在运行相同代码的多个进程之间共享)
  • 数据段、堆栈(stack)和堆(heap)

每个进程都有自己的逻辑地址空间,其中堆栈和堆被放置在相对的两侧,以允许它们增长

进程在内存中的表示

进程的生命周期 

进程状态和转换

状态

  • 刚刚创建了一个新(new)进程。它有一个PCB,正在等待被承认,尽管它可能还没有在内存中。
  • 就绪(ready)进程正在等待CPU可用。
  • 当前正在运行(running)的进程的指令由CPU执行。
  • 阻塞(blocked)的进程无法继续,例如正在等待I/O
  • 终止(terminated)的进程不再可执行。数据结构——PCB可暂时保存。
  • 中止(suspended)的进程被换出(不作进一步讨论)

转换

状态转换包括:

  1. New→ready:承认进程并投入执行
  2. Running → blocked:例如,进程正在等待输入或执行系统调用
  3. Ready→running:进程调度器(process scheduler, 指在操作系统中负责决定进程执行顺序的组件)选择该进程
  4. Blocked→ready:事件发生,例如I/O操作已经完成
  5. Running→ready:进程放弃CPU,例如由于中断(interrupt)或暂停(pause)
  6. Running→exit:进程已经完成,例如程序结束或遇到异常

中断和系统调用驱动这些转换。

操作系统队列

OS Queues

进程的操作系统实现

上下文转接:多路编程

现代计算机是多路编程(multi-programming)系统
假设是单处理器系统,各个进程的指令是顺序执行的:

  • 多路编程可以追溯到“MULTICS”(多路存取计算机系统(Multiplexed Information and Computing Service))时代
  • 多路编程是通过交错执行进程,将CPU时间划分为时间片来实现的
  • 通过称为上下文切换(context switching)的过程在进程之间交换控制
  • 在时间片的长度和上下文切换时间之间存在一种权衡
  • 真正的并行需要硬件支持

当发生上下文切换时,系统保存旧进程的状态并加载新进程的状态(产生开销(overhead))。

  • 保存⇒更新进程控制块
  • (重新)启动⇒进程控制块读取 

较短的时间片段会产生良好的响应时间,但有效利用率较低。例如,假设上下文切换和时间片都使用1ms。那么:

  • 100个进程中的最后一个开始运行需要99x (1+1) = 198ms。
  • CPU时间的一半(1/(1+1)=0.5)是在做有用的工作。

长时间切片会导致较差的响应时间,但会带来更好的有效利用。例如,假设上下文切换时间为1ms,时间片为100ms。那么: 

  • 100个进程中的最后一个开始运行需要99x (100+1) = 9999ms。
  • CPU时间的99%(100/(1+100)=0.99)是在做有用的工作。

进程控制块包含三种类型的属性:

  • 进程标识 Process identification(PID, UID,父PID)
  • 进程控制信息 Process control information(进程状态、调度信息等)
  • 进程状态信息 Process state information(用户寄存器、程序计数器、堆栈指针、程序状态字、内存管理信息、文件等)

进程控制块是内核数据结构,也就是说,它们是受保护的,只有在内核模式下才能访问!

  • 允许用户应用程序直接访问它们可能会损害它们的完整性
  • 操作系统通过系统调用(例如设置进程优先级)代表用户管理它们。

切换过程:

  1. 保存进程状态(程序计数器、寄存器)
  2. 更新PCB(running -> ready/blocked)
  3. 将PCB移动到适当的队列(ready/blocked)
  4. 运行调度程序,选择新进程
  5. 更新到新PCB中的运行(running)状态
  6. 更新内存管理单元(MMU)
  7. 恢复过程

进程实现

表和控制块

操作系统会将有关“资源”状态的信息存放在表格中:

  • 进程表 Process tables(进程控制块)
  • 内存表 Memory tables(内存分配、内存保护、虚拟内存)
  • 输入/输出表 I/O tables(可用性、状态、传输信息)
  • 文件表 File tables(位置、状态)

进程表为每个进程都保存着一个进程控制块,该控制块在进程创建时予以分配。 表由内核进行维护,并且通常会相互关联。

系统调用

进程创建 

进程创建(Process Creation)

在计算机操作系统中,进程创建是指创建一个新的进程,以便执行某个程序或任务。

真正的系统调用被“包装”在操作系统库中(例如libc),遵循一个定义良好的接口(例如POSIX, WIN32 API)。

例如,在类unix操作系统上,调用fork来创建进程的副本。在Linux上,用于实现fork的底层系统调用是clone。

Linux下的进程创建:Fork和Exec模式

fork()创建当前进程的完全复制

  • 子进程执行的第一条指令是fork调用后的第一条指令

fork()将子进程的进程标识符返回给父进程。

fork()返回0给子进程

常见的模式如下所示:

  • 调用fork()来创建当前进程的精确副本。
  • 在子进程中,调用“exec”函数之一,用一个新程序替换当前进程。例如execl("/bin/ls", "ls", "-l", 0)将当前进程替换为ls,这是bash等Unix shell中典型的调用模式。

  1. 父进程调用fork()创建子进程

  2. 子进程:

    • 打印"Child process"

    • 执行ls -l命令显示当前目录详细列表

    • 命令执行完毕后子进程退出

  3. 父进程:

    • 等待子进程结束

    • 打印子进程的退出状态

    • 然后父进程退出

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
    pid_t const pid = fork();

#include语句:包含必要的头文件

  • stdio.h:标准输入输出

  • unistd.h:提供fork()和execl()等系统调用

  • sys/wait.h:提供waitpid()函数

main()函数:程序入口

pid_t const pid = fork();:

  • 调用fork()创建新进程

  • 返回值:

    • <0:创建失败

    • =0:当前是子进程

    • >0:当前是父进程,返回值为子进程ID

错误处理: 

if(pid < 0){
    printf("Fork failure\n");
    return -1;
}

 子进程分支:

else if(pid == 0) {
    printf("Child process\n");
    execl("/bin/ls", "ls", "-l", 0);
}
  • 打印"Child process"

  • 使用execl()执行/bin/ls程序,参数为ls -l

  • execl()成功后不会返回,原进程映像被替换

 父进程分支:

else {
    int status = 0;
    waitpid(pid, &status, 0);
    printf("Child %d returned %d\n", pid, status);
}
  • 使用waitpid()等待指定子进程结束

  • 打印子进程ID和退出状态

进程终止

进程终止(Process Termination)

指计算机操作系统中一个运行中的程序或应用程序实例结束运行的过程。

通过exit和abort的系统调用可以用来显式地通知OS进程已经终止

  • 必须取消资源分配
  • 输出必须刷新
  • 可能需要执行流程管理

一个系统调用来终止其他进程:

  • UNIX/Linux: kill()
  • Windows: TerminateProcess()
【十万字拆解】从零开始实现GPT-2(完整版) 本文是一篇 14 万字、从零硬核实现 GPT 的保姆级指南。内容全面覆盖四个阶段:①从最基础的 Bigram 语言模型切入,跑通数据处理与训练闭环;②仿照 Transformer 架构,深度研究 Multi-Head Attention、残差网络、LayerNorm 及 Dropout 的底层数学与代码实现;③从零构建BPE 分词器,对齐 GPT-2 规范;④从头搭建 GPT-1/2 工业级预训练流程,包含混合精度、梯度累积等十余项硬件级工程调优,并在 AutoDL 算力平台上从0开始训练!适合所有层次! 阅读详情

相关推荐

SAP 深入理解库存

当 某个期间发生货物移动的时候,系统在更新mard数据的之前(这个表是实时更新的),会检查此笔业务过账期间和mard里对应记录的期间是否一致,也就是 看这是不是本期间第一笔移动。其二,我们不能保证这定期的作业的确定性,硬件维护、系统性能都可能使这预定的“时刻”出现偏差,如果某一次没能抓取该时刻的库存,对整个报表来说,是数据的缺失;中,当某一期间(Period)的第一项操作更新了物料数量或价值,则SAP系统会向表MBEWH写入一条记录,以第一项操作之前的余额、价格控制为标准。这对于业务数据量大的。

matinal 當冬夜漸暖 。公众号:matinal 3621

顶尖高校强化学习课揭示的RL认知框架与工程落地本质

强化学习(RL)不仅是算法实现,更是融合最优控制、决策理论与认知科学的系统性智能范式。其核心原理植根于马尔可夫决策过程(MDP)、策略梯度与探索-利用权衡等基础概念,技术价值在于 bridging simulation-to-reality gap,支撑机器人控制、自动驾驶与自适应AI等高可靠性场景。真实落地中,reward shaping、GAE优势估计、target network同步等关键设计均非调参技巧,而是对物理约束、信息时效性与价值对齐的工程响应。本文基于伯克利CS285、斯坦福CS234与UC

weixin_30564901的博客 461

从5V降到3.3V,你的LDO到底有多烫?手把手算功耗、选散热,避开这些坑

本文详细解析了LDO在5V转3.3V电路中的发热问题,提供了精确的功耗计算公式和散热设计方法。通过对比不同封装的热阻参数和优化PCB布局,帮助工程师有效降低LDO温度,避免热保护触发。文章还探讨了替代方案的技术拐点,为电源系统优化设计提供实用指导。

weixin_30304375的博客 435

Lecture 7: Processes 4, Further Scheduling

写T(v,r)来表示任务T有v个单位的虚拟运行时间和r个单位的实时运行时间。在 CPU 上记录的虚拟时间实际上是经过权重调整后的 CPU 实际运行时间。在完成该任务所占用虚拟时间中1/N的目标延迟后,我们会将其替换为虚拟运行时间最短的下一个任务。——想想看,如果一个长时间被阻塞的任务没有这个设置,它在 CPU 上运行的时间会有多长啊!请注意,任务将获得不同的运行时间窗口——这与传统的时间分割方式不同。——在考虑替换之前,我们允许任务在CPU上运行的最小时间。,因此它将被选为下一个在 CPU 上运行的任务。

Dead_Simba的博客 808

Vercel静态站被墙别慌!手把手教你用Cloudflare免费CDN+域名解析搞定DNS污染

本文详细介绍了如何利用Cloudflare免费CDN和域名解析解决Vercel静态网站遭遇DNS污染的问题。通过诊断DNS污染、设计Cloudflare解决方案架构、实战配置步骤以及高级调优技巧,帮助用户快速恢复站点访问并提升防护能力。

weixin_27442001的博客 677

Rocky Linux 9 离线环境Docker部署实战:从依赖打包到服务启动

本文提供了一份详尽的Rocky Linux 9离线环境Docker部署实战指南。针对无法访问外网的生产或内网服务器,文章详细讲解了如何在联网跳板机上下载Docker二进制包及所有系统依赖RPM包,并完成打包。随后,手把手指导在离线服务器上进行依赖安装、二进制文件部署、systemd服务配置、SELinux与防火墙调优,最终实现Docker服务的成功启动与验证。

weixin_28363123的博客 138

Lecture 2:Markov Decision Processes

Part 1 一、马尔可夫链 满足马尔可夫特征,未来的转移与过去是独立的,只取决于现在。 状态转移矩阵 给定了马尔可夫链以后,可以对其进行采样,得到一条轨迹。 二、马尔可夫奖励过程 马尔可夫链+奖励函数 奖励函数是一个期望 类比一个没有动力的纸船,随波逐流到一定位置后得到相应奖励。 值函数,是未来奖励的期望 引入gamma的原因 避免陷入环;同时可以尽快获得相应奖励,而不是在后面才获得奖励。...

野生蘑菇菌的博客 418

Android逆向分析

Android 逆向开发是指对已发布的 Android 应用进行分析和破解,以了解应用程序的内部工作原理,获取应用程序的敏感信息,或者修改应用程序的行为。Android应用 Java编写的,利用Android SDK编译代码,并并且把所有的数据和资源文件打包成一个APK(Android Package)文件这是一个后缀名为.apk的压缩文件,apk文件中包含了一个Anddroid应用程序的所有内容,是Android平台用于安装应用程序的文件。

qq_51598534的博客 6293

Lecture 2: Markov Decision Processes

1.MDPs介绍 1)马尔可夫决策过程正式描述了强化学习的环境,并且环境是可观测的 2)当前状态完全刻画了整个过程 3)几乎所有的强化学习问题都可以描述成为MDPs,比如 最优控制优先使用连续MDPs 部分可观测问题可以转换为MDPs “侠盗飞车”也是状态相关的MDPs 2.马尔可夫特性:即无记忆性。也就是说,这一时刻的...

weixin_30455661的博客 202

解决 python2.7中 ImportError: No module named Crypto.Signature

我的解决办法,先查看有没有安装 pip,直接执行pip 回车 没有出现null什么的就安装了,如果没有安装去其他博客哪里看一下,正常情况是默认就有的,然后使用。发现我自己也不会啊,就百度看看,想着网上的解决方法一大片,但是都是废话,能用的没有几个,而且能安装的没有几个。这个里面的python2、3就是系统里面的python版本,直接跟我这样就可以了除非版本不一样,也就是没有这个版本。就可以使用了,第一个应该是卸载之前的,然后重新安装,我的就是这样解决的。就比如我的,我现在使用的 python2.7。

记录一下 1610

9、工业数据管理:Historian、ERP、MES与资产模型解析

本文深入解析了工业数据管理中的核心概念与技术,包括Historian数据库、ERP和MES系统以及资产模型。文章详细介绍了Historian数据库的特性、架构分类、数据采集方式及时间序列处理能力,同时探讨了ERP和MES系统的功能与优势,特别是MES在生产执行中的重要作用。资产模型部分结合ISA-95和ISA-88标准,阐述了工业资产的层次化建模方法。此外,文章还分析了各系统之间的协同关系、面临的挑战及应对策略,并展望了未来工业数据管理的发展趋势,如云原生技术、人工智能融合和工业物联网的应用。

pz89012345的博客 144

David Silver强化学习课程 Lecture 2: Markov Decision Processes

文章目录AbstractMarkov PropertyMarkov ChainExample:Student Markov ChainMarkov Reward ProcessExample: Student Markov Reward ProcessReturn(回报)Value functionExample: Student MRP ReturnsBellman EquationExampl...

KunBB的博客 913

Android面试必考问题:Android性能优化最全面试题及参考答案(8万字长文)

Android 中的 OOM(Out Of Memory,内存溢出)异常是指应用程序在运行过程中,由于申请的内存空间超过了系统所能提供的最大内存限制而导致的错误。在 Android 中,内存泄漏是指应用中的某些对象在不再被使用后,仍然被其他对象持有引用,导致这些对象无法被垃圾回收器回收,从而占用内存空间,随着时间的推移可能会导致应用内存不足,甚至崩溃。在一次开发 Android 应用的过程中,我发现应用在长时间运行后会出现内存占用过高的情况,导致应用变得卡顿,甚至可能会被系统强制关闭。

大模型大数据攻城狮的专栏 2532

COMP 3500 Lecture 29: Mock Exam 2Matlab

dai 写COMP 3500 Lecture 29: Mock Exam 2Matlab。

trheesheep2的博客 967

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

基于Springboot+Vue的考研学习交流系统的设计与实现-计算机毕设 【课程设计】 22731

(1)首页:展示平台核心功能和最新动态,提供便捷的导航,个性化推荐帮助学生快速找到所需学习资源和活动信息。 (2)问答社区:学生可以提出问题、回答他人问题、分享经验,促进互动与知识共享,增强学习社群氛围。 (3)公告资讯:发布考研相关的公告、政策更新及重要通知,确保学生能够及时获得关于考试、报名等关键信息。 (4)留言反馈:学生可以提交问题或建议,平台会及时回应和处理反馈,提升用户体验并改进服务。 (5)免费视频与付费视频:平台提供免费的学习视频内容,并且支持购买付费视频课程,满足不同学习需求。 (6)考研

WeiXin_DZbishe的博客 1362

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

数学分析和高等代数自学教材推荐

……

u013669912的博客 1161

【课程设计】springboot在线法律服务平台-计算机毕业设计源码45635

1、普通用户 (1)用户注册与登录模块: 注册账户并设置个人信息。 登录平台进行法律咨询和案件委托。 (2)法律知识库查询模块: 搜索法律条文、案例分析等。 查看法律术语解释。 (3)律师匹配与委托模块: 根据案件类型、地区等条件搜索并选择律师。 在线委托律师办理案件。 (4)案件进度跟踪模块: 查看自己委托案件的实时进度。 (5)法律文书模板下载模块: 下载并填写各类法律文书模板。 (6)法律学习资料共享模块(论坛): 在线学习法律课程、观看讲座视频、阅读电子书等。 (7)用户反馈与评价系统

Biye_Design的博客 611

High-Resolution Image Synthesis with Latent Diffusion Models 基于潜在扩散模型的高分辨率图像合成

Robin Rombach 1 * Andreas Blattmann1 * Dominik Lorenz 1 Patrick Esser ® Björn Ommer 1 1 Ludwig Maximilian University of Munich & IWR, Heidelberg University, Germany ° Runway ML慕尼黑路德维希-马克西米利安大学 & 德国海德堡大学 IWR ° Runway MLhttps://github.com/CompVis/latent-diff

u013250861的博客 137

鸿蒙操作系统实现应用接续跨设备流转实战

应用接续的落地成本很低:一个配置、一个onContinue回调、一处 launchReason 判断,合计不足百行代码,就能让任务在手机、平板、鸿蒙电脑之间无缝续接。随着互助通信共享等组网能力在更多机型下放,这条能力的实用价值会持续放大,建议交互密集型应用尽早接入。

NJPJI_Yang的博客 357

【Linux】APT 本地 deb 安装与 `-f` 参数总结笔记

apt install ./xx.deb 可自动解析并安装依赖,无需 -f;-f 仅用于修复已损坏的依赖状态,非首次安装时必需。apt install -f 可单独运行,修复 broken dependencies。两者职责不同:前者是安装与依赖解决,后者是故障修复。完全离线时需提前准备依赖包或本地源。

hknaruto的专栏 211

【Linux网络】TCP 服务器并发处理多客户端:从 fork 分发到双重 fork 彻底消灭僵尸进程

拆解 TCP 服务器并发演进链:fork 分发连接、SIGCHLD 循环回收僵尸、双重 fork 交孙进程给 init 收养,并给出模型选型与线上排错对照。

2301_78967866的博客 421

Linux rm 误删文件恢复实操教程

Linux使用rm删除文件时,并不会直接抹除磁盘上的数据,只是移除文件索引,让系统不再识别这块空间。只要没有写入新数据,原有扇区内容就会保留。新文件写入才有可能覆盖这些区域,一旦覆盖就很难找回。恢复的本质就是扫描磁盘,找到这些还存在、但索引丢失的数据条目,再把它们导出保存到其他分区。越早停止写入,恢复成功的概率越高。

海天数据恢复-winhex数据恢复教程 228

Linux sudo

如果输出 → 无 sudo 权限 如果输出 → 拥有全部 sudo 权限 辅助验证命令 ⚠️ 注意:在 wheel 组 ≠ 一定能 sudo,必须 开启 Ubuntu/Debian: ✅ 重要:修改组之后,用户要重新登录才生效! 或者执行 临时生效 看到这行(没有 #注释)才生效: 方式 2:visudo 直接单独给用户授权(精细化权限) 找到 ,下面添加一行: 自带语法校验,写错会告警,不要直接 vim 改 ,写错直接 sudo 炸掉! 想免密 su

fengliyang_的博客 178

【HarmonyOS 7 语音 AI 开放能力深度实战】 05 文本转语音实战,文字播报与合成状态控制

会议笔记已经整理成文字,用户离开屏幕以后,可能仍然希望听一遍已经确认的事项。应用可以提供一个播报按钮,把当前内容交给语音合成服务。但是,按钮点击成功与整段内容播放结束之间,还隔着引擎初始化、音色选择、合成和音频输出。页面如果在第一个完成回调出现时就恢复空闲,用户可能再次启动播报,让新的内容与尚未结束的声音互相影响。文本转语音服务负责把文字转换为声音,应用仍然需要选择音色、提交请求并管理页面状态。对于直接播报,合成引擎可以负责播放,页面不必另建播放器;但页面仍需要根据播放事件判断什么时候可以开始下一次操作。

Code Metaverse 181

ARM64-GNU汇编器

o伪指令分配大小例子伪指令分配大小例子.byte1 字节.byte 0x412 字节.word / .long 4 字节8 字节.ascii字符串(不加 \0)字符串(自动加 \0).byte:把 8位数当成数据插入汇编代码中。.hword和 .short:把16 位数当成数据插入汇编代码中。.long和 .int:这两个伪指令的作用相同,都把 32位数当成数据插入汇编代码中。.word:把 32位数当成数据插入汇编代码中。

weixin_43903002的博客 191

第一章 Shell 概述

本文介绍了Shell编程的基础知识,包括Shell的起源与发展、常见Shell类型及查看方式,阐述了Shell作为命令解释器连接用户与操作系统内核的作用。强调其作为解释型脚本语言的优势,适用于系统管理自动化任务。内容涵盖Shell脚本基本结构、注释规范、编写风格、执行方法及常用命令(如echo、printf、history、管道等),并讲解了命令执行顺序、退出状态码等核心概念,为初学者提供系统学习路径。

sbjdhjd的博客 275
上一篇: Lecture 3: Introduction 3
下一篇: Lecture 5: Processes 2, Scheduling
Dead_Simba
博客等级 码龄2年 172粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值