Presentation is loading. Please wait.

Presentation is loading. Please wait.

Lab2 syscall 参数问题 参数check在当前代码框架下并不具有任何含义, 它就只是个参数而已 参数不超过四个: 系统调用号

Similar presentations


Presentation on theme: "Lab2 syscall 参数问题 参数check在当前代码框架下并不具有任何含义, 它就只是个参数而已 参数不超过四个: 系统调用号"— Presentation transcript:

1 Lab2 syscall 参数问题 参数check在当前代码框架下并不具有任何含义, 它就只是个参数而已 参数不超过四个: 系统调用号
字符串 字符串长度 打印参数

2 Lab2 滚屏和清屏 putc 系统调用 基于 putc 实现或不基于 putc 实现库函数都 是可以的, 因为没有什么具体的区别
在之后的实验中大家可以尝试加入键盘中断 来实现翻页

3 Lab2 段 用户程序重定位到 0x0 用户段基地址 0x200000 核心段基地址 0x0
在内核中访问用户数据时, 访问地址应该加 上用户段的基地址才是正确的地址 切换特权级后的第一步应该是切换各个段的 值

4 Lab3-进程管理

5 目录 实验要求 进程与线程 PCB 进程调度 相关系统调用

6 实验要求 内核:实现进程切换,并提供系统调用fork, exit, sleep(时钟中断); 库:封装上述系统调用;
用户:实现一个Pingpong的测试程序, Ping进程与Pong进程各自sleep若干秒之后 分别打印出Ping和Pong。

7 实验要求 除了 Ping, Pang 两个进程外, 你还需要一个 IDLE内核线程
在其他进程撤销没有进程可以进行调度的时 候由 IDLE 线程掌控 CPU IDLE 线程什么都不做, 只是等待中断到来

8 实验要求 Ping 程序由内核直接加载, 并分配地址空间 Pang 程序是由 Ping 程序通过系统调用 fork() 产生的子进程

9 实验要求 我们需要什么? 时钟中断 进程调度 两个进程

10 进程与线程 进程和线程 在操作系统实验中, 进程和线程将一视同仁 进行调度, 因此我们将使用 PCB 的概念来 描述一个进程或线程
线程是调度的基本单位 进程是资源分配的基本单位 在操作系统实验中, 进程和线程将一视同仁 进行调度, 因此我们将使用 PCB 的概念来 描述一个进程或线程

11 PCB PCB(Process Control Block) 进程控制块记 录了进程的运行状态, 也是内核进行进程调 度的基本单位

12 PCB 进程在进行调度的时候, 需要保存的进程现 场状态有哪些? 地址空间是独立的, 但是 CPU 只有一个 所有可能被修改的内容
状态寄存器, 通用寄存器, 段寄存器, 指令寄 存器, 栈顶指针寄存器

13 PCB 一个进程的生命周期

14 PCB 进程运行状态 相对的, 内核中必然存在至少两个队列 就绪(Runnable/Ready) 运行(Runing)
阻塞(Block/Sleep) 相对的, 内核中必然存在至少两个队列 就绪队列 阻塞队列

15 PCB 其他的一些内容 运行时间(时间片轮转) 阻塞时间(sleep) 进程号 进程名 优先级 ...

16 进程调度 简单的调度 进程 A 运行中 时钟中断发生 进程状态被保存, 进程被挂起 进程调度 进程 B 被启动

17 进程调度 何时保存进程状态? 时钟中断发生后立即保存进程现场信息 怎么保存? 两种方法 怎么恢复?

18 进程状态保存1 CS, EIP, EFLAGS, ESP, SS 通用寄存器 段寄存器 问题: 从堆栈中 pop 出来
一个一个保存到 PCB 中 段寄存器 分别保存到 PCB 中 问题: 在保存通用寄存器的值前, 通用寄存器的值 可能已经被修改, 不推荐

19 进程状态保存2

20 进程状态保存2 高地址 PCB ss esp eflags cs eip tss.esp0 esp 低地址

21 通用寄存器 PCB pusha tss.esp0 eax eca edx ebx ... esp

22 段寄存器 PCB tss.esp0 ds es fs gs esp

23 进程状态保存2 其他信息的保存或修改 运行状态 运行时间 ...

24 进程调度 我们在中断发生的第一时间将进程现场信息 保存到了 PCB 中, 同时我们也发现我们的 栈顶就在 PCB 中, 为了做到对 PCB 的正确 访问, 在保存完进程的现场信息后, 修改栈 的内容前, 应该进行一次栈的切换 从 PCB 表切换到内核栈 防止 PCB 表内数据被修改

25 进程调度 基本调度策略 其他: 时间片轮转(RR-Round Robin) 给每个进程分配一定的时间片 优点? 先到先服务(FIFO)...
最简单, 最古老, 最公平 其他: 先到先服务(FIFO)...

26 进程恢复 在调度结束之后, 时钟中断会将需要恢复的 进程的现场进程恢复, 当然会包括以下内容:
段寄存器 通用寄存器 指令寄存器 状态寄存器 如果你使用了进程状态保存方法2, 那就需 要再次在调度结束后从内核栈切换到 PCB 中, 使用 pop 和 popa 指令恢复, 最后使用 iret 返回

27 段寄存器 PCB ds es fs gs esp

28 通用寄存器 PCB pusha eax eca edx ebx ... esp

29 进程恢复 PCB ss esp eflags cs eip esp iret

30 进程恢复 注意!!! 因为 tss 只有一个, 所以为了下次中断发生时 能够正确保存进程的现场信息, 你需要修改 tss 段中的 esp0 的值. esp0 应该设成什么呢?

31 相关系统调用 fork() sleep() exit()

32 fork() 内核将复制父进程的所有状态和数据, 并 返回两个值, 父进程范围子进程的 PID, 子进程返回0
fork是 Unix 系统中创建新进程的唯一途径 fork() 会创建一个和父进程”一模一样”的子 进程 除了进程 id 以外 内核将复制父进程的所有状态和数据, 并 返回两个值, 父进程范围子进程的 PID, 子进程返回0

33 fork()

34 fork() 父进程通过 fork 生成子进程, 因此我们在 lab2中才有了两个进程

35 sleep() 实现方法不限, 但是类似下面这种方法的是 绝对没有分数的

36 exit() 进程撤销函数, 用于进程自我销毁 内核处理该系统调用的过程 回收该进程的内存空间 删除 PCB 表中该进程的所有内容
回到 IDLE 线程等待中断

37 Talk is Cheap Show Me the Code
Q&A


Download ppt "Lab2 syscall 参数问题 参数check在当前代码框架下并不具有任何含义, 它就只是个参数而已 参数不超过四个: 系统调用号"

Similar presentations


Ads by Google