![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统_哈工大_李治军
文章平均质量分 74
JieQiong1
这个作者很懒,什么都没留下…
展开
-
0.初识操作系统
操作系统哈工大李治军 这个分类中的内容是 看的 李治军老师的公开课,看视频过程中做的课堂笔记。 目标是完成课后的实验,加强对操作系统的理解。等加强下汇编,会做对应的实验。原创 2017-01-09 12:22:50 · 858 阅读 · 0 评论 -
12.线程的引出与实现——核心级线程实现实例
1.从进入内核开始——从某个中断开始main(){ // main先执行A,将B的开始地址压栈,即 A函数返回地址 是 B的开始地址 A(); B();}A(){ //进程由资源和执行序列组成,fork会创建资源和执行序列(线程) //fork 是 创建系统进程的调用,会引起中断,可能会引起 内核级线程 切换 fork();}fork:原创 2017-01-22 10:47:35 · 528 阅读 · 1 评论 -
5.系统接口——系统调用的实现
1.系统调用的直观实现需求:内核地址100的位置,保存的字符:lizhijun,内核中提供一个方法whoami,whoami中打印字符,应用程序 调用内核的 whoami 就 可以 将该字符串 打印到屏幕上// 用户程序main(){ whoami();}//内核whoami(){ printf(100,8);//100的地方开始存的 lizhijun}直观想法:用户程原创 2017-01-12 16:33:13 · 1827 阅读 · 0 评论 -
13.线程的引出与实现
1.回顾程序开始执行,PC置初值,CPU就不断地 取指执行 顺序执行,CPU如果遇到 耗时的指令,就在等待,没有充分利用,引出了 任务切换1.1 栈实现跳转1.2 一个栈 + Yield 造成的混乱D执行完,回不到 2041.3 两个栈 + 两个用户TCB切换时,Yield找到 新的用户线程的TCB,找到新的用户栈,切换1.4 内核栈切换用户栈 关联着 内核栈,切换时,从用户栈 到 内核栈,到TC原创 2017-01-23 17:49:50 · 306 阅读 · 0 评论 -
14.CPU调度——CPU调度策略
1.CPU调度的直观想法线程1阻塞,线程2 3都处于就绪态,该执行哪个呢?需要有调度策略FIFO 先进先出,简单有效。比如:食堂Priority 任务短的先执行(怎么知道任务的执行时长)任务多了,优先级询问 会越来越长如果优先级高的任务 耗时很长怎么办?比如优先级高的用户需要填一个很长的表格2.面对诸多场景,如何设计调度算法?目的: 面对用户,目的是让用户满意面对进程:CPU调度原创 2017-01-26 20:46:24 · 2457 阅读 · 0 评论 -
15.CPU调度——schedule
1.Linux 0.11 的调度函数 schedulekernel/sched.c schedule() 的目的是找到下一个任务 next,切换到下一个任务/* * 'schedule()' is the scheduler function. This is GOOD CODE! There * probably won't be any reason to change this, as原创 2017-01-26 20:52:45 · 788 阅读 · 0 评论 -
16.进程同步与死锁——进程同步与信号量
1.进程合作:多进程共同完成一个任务1.1 司机与售票员// 司机while(true){ //等待售票员关门的信号 启动车辆; 正常运行; 到站停车;}//售票员while(true){ 关门; 售票; //等待司机到站停车的信号 开门;}1.2 打印机打印机按照打印队列执行打印,当打印队列中有 6个打印任务,2个进程同原创 2017-01-30 10:54:26 · 435 阅读 · 0 评论 -
17.进程同步与死锁——信号量临界区保护
1.温故知新通过对信号量的访问和修改,让进程有序推进 问题: empty值必须是正确的,如果empty错了,就不能有序推进了2.共同修改信号量引出的问题//生产者Producer(item){ P(empty);//生产者先判断 缓存区个数 empty是否满了,empty == 0,阻塞 ...}//生产者P1register = empty;register = reg原创 2017-01-31 09:51:45 · 1425 阅读 · 0 评论 -
18.进程同步与死锁——信号量的代码实现
1.生产者代码//伪代码Producer(item){ P(empty); ... V(full);}//sem.c 进入内核//信号量在内核中,包含 value 和 PCB,value的值能被多个进程看到typedef struct{ char name[20];// name是信号量的名字,比如empty int value; // value原创 2017-01-31 19:20:23 · 965 阅读 · 1 评论 -
11.线程的引出与实现——内核级线程
1.内核级线程用户级线程: 创建:创建 TCB、栈,关联TCB和栈。将PC指向自己的栈 切换:切换TCB,再切换栈进程切换:切换指令流(线程)、切换资源(内存管理) 进程要使用内存、硬件设备等,在内核中(用户态搞不定资源) 切换进程 就是 切换 内核级线程MMU(memory management unit):内存管理单元,有时称作分页内存管理单元。它是一种负责处理中央处理器的内存访问请求的原创 2017-01-18 10:33:27 · 682 阅读 · 0 评论 -
7.操作系统历史与我们的学习任务——我们的任务
1.计算机有哪些硬件CPU 内存 显示器 磁盘 打印机 键盘…… 2. 用户使用硬件开机时 初始化了 各硬件,用户通过 系统调用 使用硬件,将 用户的操作变成 设备细节,比如将 Hello字符串转为 屏蔽的像素3. 操作系统 管理硬件资源4.我们要做的是 方便用户使用硬件资源我们的课程中讲 1.通过接口进入系统 2.进程管理:讲fork,fork是什么,是怎么管理进程的 3.内存管理:*p=原创 2017-01-13 12:21:27 · 369 阅读 · 0 评论 -
1.操作系统概述
什么是计算机计算机是程序员吃饭的家伙,可以帮助人们解决一些实际问题 计算机硬件也称裸机,操作系统是硬件的衣服 什么是操作系统操作系统是计算机硬件和应用之间的一层软件操作系统帮助我们使用硬件,如使用显存高效的使用硬件,如开多个终端(窗口)操作系统管理哪些硬件CPU管理内存管理终端管理磁盘管理文件管理网络管理电源管理多核管理学习操作系统的方式:从应用软件 调用 操作系统原创 2017-01-09 17:53:52 · 745 阅读 · 0 评论 -
8.多进程图像的引出——CPU管理的直观想法
1. CPU工作原理CPU上电后 发生了什么?自动取指执行 将一个程序加载到内存中,设置PC指针,指向一个地址(比如 PC = 50), CPU 根据PC的位置 发出取指指令 把50放到 地址总线上,内存通过总线 将50上的命令 传递给 CPU CPU解释执行该指令,该命令是 将 100位置上的值 0 赋值给 axCPU 怎么工作?不断的取指执行。自动取指执行,PC自动累加2.管理CPU的最原创 2017-01-13 17:30:19 · 765 阅读 · 0 评论 -
2.操作系统引导——揭开钢琴的盖子
一、计算机历史1. 最开始的图灵机,有控制器,只是在纸带上做简单运算 计算3+2=5时,先从纸带读入3,再读入2,再读入 +,计算完 3 + 2 = 5 后,再将 5 写入 纸带2. 通用图灵机,控制器的内容是可以修改的。控制器像个厨师,控制的程序就是一个菜谱。设置不同的程序,完成不同的任务。3. 系统将 程序 放到 存储器,指针(IP或PC)指向当前要处理的指令,载入指令,形成当前原创 2017-01-09 18:16:30 · 1174 阅读 · 0 评论 -
9.多进程图像的引出——多进程图像
1. 什么是多进程图像?如何使用CPU? 让程序执行起来如何充分利用CPU? 启动多个程序,交替执行多进程图像:多个进程使用CPU的图像操作系统 把这些 启动了的程序(进程)用PCB记录好,再按照合理的次序推进(分配资源、进行调度) PCB:Process Control Block,用来记录进程信息的 数据结构2.多进程如何组织?有程序在执行;有一些进程在等待执行,放在就绪队原创 2017-01-13 17:39:19 · 993 阅读 · 0 评论 -
3.操作系统引导——操作系统启动
1.setup.ssetup中,操作系统接手硬件,初始化 开机做两件事:bootsect读入系统,setup初始化!! setup.s (C) 1991 Linus Torvalds!! setup.s is responsible for getting the system data from the BIOS,! and putting them into the appropria原创 2017-01-11 18:14:23 · 3341 阅读 · 1 评论 -
4.系统接口——操作系统接口
Interface:electrical circuit linking one device with another and enabling data coded in one format to be transmitted in another(牛津词典)1.用户是怎么用操作系统的?1.1 命令行命令是用C语言写的程序,程序编译完,会编译处 可执行文件,比如可执行文件是output,she原创 2017-01-12 14:21:29 · 3578 阅读 · 0 评论 -
10.线程的引出与实现——用户级线程
1.线程的引入进程 = 资源 + 指令执行序列线程:一个资源 + 多个指令执行序列 资源(映射表)和指令分开线程中,一个映射表 对应 多个指令序列,会加快切换速度,切换指令需序列,只要改PC值就可以了 线程切换,是从一段程序,切换到 另一段程序2.多个执行序列 + 一个地址空间 的应用举例浏览器显示网页我们平时用的浏览器 打开一个网页时,都是 先 加载文字,过一会,加载了 图片,最后 出现原创 2017-01-16 18:17:12 · 600 阅读 · 0 评论 -
6.操作系统历史与我们的学习任务——操作系统历史
1. 1955-1965计算机非常昂贵,上古神机IBM7094,造价250万美元以上 - 计算机使用原则:只专注于计算 - 批处理系统:完成第一个任务,做第二个任务……如果当前任务出错,输出到磁带上,修改下PC,跳转到下一个任务。 批处理系统 处理不了 多种任务:比如有2个任务,一个是IO任务(银行账户余额发生变化时,将存款写入磁带),一个是计算任务。执行磁带写入时,CPU需要等待,写入结束原创 2017-01-13 12:05:42 · 699 阅读 · 0 评论 -
19.进程同步与死锁——死锁处理
1.引出死锁再看生产者-消费者的信号量解法,之前的例子://用文件定义 共享缓冲区int fd = open("buffer.txt");write(fd, 0, sizeof(int));//写inwrite(fd, 0, sizeof(int));//写out//信号量的定义和初始化semaphore full = 0;//生产的产品的个数semaphore empty = BUFFE原创 2017-01-31 21:30:39 · 563 阅读 · 0 评论