操作系统Operating Systems信号量的代码实现Coding Semaphore &死锁处理Deadlock 可以操刀了—从纸上到实际 从Linux 0.11 那里学点东西… 读磁盘块 bread(int dev,int block){ struct buffer_head * bh; ll_rw_block(READ,bh); wait_on_buffer(bh); 启动磁盘读以后睡眠,等待磁盘读完由磁盘中断将其唤醒,也是一种同步 lock_buffer(buffer_head*bh…
操作系统Operating Systems进程同步与信号量Processes Synchronization and Semaphore 进程合作:多进程共同完成一个任务 从纸上到实际:生产者− − 消费者实例 共享数据 #define BUFFER_SIZE 10 typedef struct { . . . } item; item buffer[BUFFER_SIZE]; int in = out = counter = 0; 注意:这些都是用户态程序! 生产者进程 while (true…
开始核心级线程 内核级线程对多核的支持怎么样? 和用户级相比,核心级线程有什么不同? ThreadCreate 是系统调用,内核管理TCB ,内核负责切换线程 如何让切换成型? − − 内核栈,TCB 用户栈是否还要用? 执行的代码仍然在用户态,还要进行函数调用 一个栈到一套栈:两个栈到两套栈 TCB 关联内核栈,那用户栈怎么办? 用户栈和内核栈之间的关联 所有中断( 时钟.外设.INT指令) 都引起上述切换 中断( 硬件) 又一次帮助了操作系统… 仍然是那个A() ,B() ,C() ,D()…
实现一个whoami 系统调用 系统调用的直观实现 问题+直观想法… 用户程序调用whoami, 一个字符串"systemcall "放在操作系统中(系统引导时载入) ,取出来打印,有什么问题? 不能随意的调用数据,不能随意的jmp . 可以看到root 密码,可以修改它… 可以通过显存看到别人word 里的内容… 地址: main() { whoami();} 用户程序 ... whoami() { printf(100, 8); } 内核,都在内存中,这内存不都是我买的吗… 100…
培根:读史使人明智 操作系统的简史 (1955-1965) 计算机非常昂贵,上古神机IBM7094 ,造价在250万美元以上 计算机使用原则:只专注于计算 批处理操作系统(Batch system) 典型代表:IBSYS 从IBSYS 到OS/360(1965-1980) 计算机开始进入多个行业:科学计算(IBM 7094) ,银行(IBM 1401) 需要让一台计算机干多种事 多道程序(multiprogramming) 作业之间的 切换和调度 成为核心:因为既有IO 任务,又有计算任务,需要…
从打开电源开始… 这神秘的黑色背后发生着什么?… 打开电源,计算机执行的第一句指令什么? 计算模型(图灵机) ⇒ 我们要 关注 指针IP 及其 指向的内容 看看x86 PC (1) 刚开机时CPU 处于实模式(和保护模式对应,实模式的寻址CS:IP(CS 左移4 位+IP) ,和保护模式不一样!) (2) 开机时,CS=0xFFFF; IP=0x0000 (3) 寻址0xFFFF0(ROM BIOS 映射区) (4) 检查RAM ,键盘,显示器,软硬磁盘 (5) 将磁盘0 磁道0 扇区读入0x7…
管理CPU ,先要使用CPU… CPU 的工作原理 CPU上电以后发生了什么? 自动的取指 — 执行 CPU 怎么工作? CPU怎么管理? 管理CPU 的最直观方法 设好PC 初值就完事! 看看这样做有没有问题? 提出问题 怎么解决? 现在变成了这个样子 多道程序.交替执行,好东西啊!   单道程序 多道程序 CPU 利用率 40/80=50% 40/45=89% DEV1 利用率 15/80=18.75% 15/45=33% DEV2 利用率 25/80=31.25% 25/45=56% 一个…
多进程是操作系统的基本图像 是否可以资源不动而切换指令序列? 进程 = 资源 + 指令执行序列 线程: 保留了并发的优点,避免了进程切换代价 实质就是映射表不变而PC 指针变 多个执行序列+ 一个地址空间是否实用? 一个网页浏览器 一个线程用来从服务器接收数据 一个线程用来显示文本 一个线程用来处理图片( 如解压缩) 一个线程用来显示图片 这些线程要共享资源吗? 接收数据放在100 处,显示时要读.. 所有的文本.图片都显示在一个屏幕上 开始实现这个浏览器… void WebExplorer()…
进程   进程模型     进程就是一个正在执行的程序的实例  值得注意的是,若一个程序运行了两遍,则算作两个进程 创建进程 在通用系统中,有四种主要事件导致进程的创建 ①系统的初始化 ②执行了 正在运行的进程 所调用的 进城创建系统调用 ③用户请求创建一个新进程 ④一个批处理作业的初始化  进程的状态 运行态(该时刻进程实际占用CPU) 就绪态(可运行,但因为其他进程正在运行而暂时停止) 阻塞态(除非某种外部事件发生,否则进程不能运行) 在Operating Systems Concept中还…
Operating Systems (COMP2006) 1st Semester 2019Page 1, CRICOS Number: 00301JOperating Systems (COMP2006)CURTIN UNIVERSITYDiscipline of ComputingSchool of Electrical Engineering, Computing and Mathematical SciencesAssignmentMultiple-Processor Schedulin…