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

Slides:



Advertisements
Similar presentations
高级服务器设计和实现 1 —— 基础与进阶 余锋
Advertisements

阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
第 3 章操作系统基础 3.1 操作系统概述 3.2 操作系统的功能模块 3.3 典型操作系统概述.
1 张惠娟 副教授 Linux 进程管理. 2 内容 进程组成 进程环境 进程管理内容 进程控制块 进程状态 进程调度 进程控制 进程通信.
Linux 系统. 操作系统发展需求 1 没有操作系统 2 简单批处理操作系统 3 多道程序设计的批处理 4 多道程序设计的分时操作系统 5 多处理机并行系统 6 网络操作系统 7 分布式操作系统.
计算机操作系统 第二章 进程管理 高校教师、高级项目经理 任铄 QQ:
第三章 礼仪类文体写作 第一节 祝词类.
2.7 线程 2.7.1线程的其本概念.
2013届 计算机科学与技术专业 毕业设计(论文) 启动报告
急難救助措施簡介 內政部社會司 99年6月7日.
孟宁 电话: 主页:
第3章第2節 國共戰爭.
实用操作系统概念 张惠娟 副教授 1.
第六讲 进程控制与调度 目的与要求:理解进程切换过程,理解进程调度原因及调度切换时机,掌握进程调度方式与实现及各种调度算法,弄清作业和进程的关系,了解线程的引入原因。 重点与难点:进程切换的实现与进程调度算法。 作业:7, 8, 10, 11, 19, 20。
Oracle数据库 Oracle 子程序.
在PHP和MYSQL中实现完美的中文显示
操作系统 (处理器管理) 徐锋 南京大学计算机科学与技术系.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
第7章 中断与异常.
汇编语言程序设计 Assembly Language Programming
計算機結構 – 概論 陳鍾誠 於金門大學.
实践演练 广州创龙电子科技有限公司 01 广州创龙电子科技有限公司
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
中国科学技术大学计算机系 陈香兰(0512- ) Autumn 2011
中国科学技术大学计算机系 陈香兰(0512- ) Autumn 2009
Linux操作系统分析 中国科学技术大学计算机系 陈香兰(0512- )
中国科学技术大学计算机系 陈香兰(0512- ) Sprint 2011
操作系统原理 Operating System Principles
第2章 进程的描述与控制 2.1 进程及其描述 2.2 进程基本状态及其相互转换 2.3 进程控制 2.4 线程 进程的引入
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
逆向工程-汇编语言
CPU结构和功能.
寄存器分配 影响程序速度的因素 cpu, register, cache, memory, disk
李元金 计算机与信息工程学院 第 3 讲 进程管理(1) 李元金 计算机与信息工程学院 1/
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
嵌入式操作系统 陈香兰 Spring 2008 中国科学技术大学计算机系.
SOA – Experiment 2: Query Classification Web Service
第二章 登录UNIX操作系统.
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
2.3 进程及其实现 进程的定义和属性 进程的状态和转换 进程的描述 进程切换与模式切换
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
实验一 体验Nachos下的并发程序设计 陈毅东 2006年春.
第2章 80x86计算机组织  计算机系统  存储器  中央处理机  外部设备.
进程概念.
Linux操作系统分析 中国科学技术大学计算机系 陈香兰(0512- )
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
电工电子技术实验 电工电子教学部.
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
信号量(Semaphore).
本节内容 内存复制指令 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
微型计算机原理与接口技术 (第2版) 赵宏伟 于秀峰 黄永平 秦贵和 北京:科学出版社 出版 吉林大学计算机科学与技术学院 制作.
iSIGHT 基本培训 使用 Excel的栅栏问题
本节内容 文件系统 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Touch Github = Touch the World
微机原理与接口技术 ——8086微处理器 西安邮电大学 计算机学院 范琳.
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
本节内容 通用寄存器 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第四章 UNIX文件系统.
Lab2 系统调用
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
本节内容 SEMAPHORE 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
本节内容 任务段 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
第六章 直接成本法.
Presentation transcript:

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

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

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

Lab3-进程管理 2016-4-5

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

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

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

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

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

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

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

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

PCB 一个进程的生命周期

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

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

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

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

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

进程状态保存2

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

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

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

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

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

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

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

段寄存器 PCB ds es fs gs esp

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

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

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

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

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

fork()

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

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

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

Talk is Cheap Show Me the Code Q&A