随笔分类 -  操作系统

摘要:这个本来是打算寒假在家看的,对操作系统有一个大概的了解,没想到受疫情影响,就一直呆在家了,这个系列也算是更新完了 而这花了二个星期的时间把王道的操作系统也看了一遍,主要是看书,做后面的习题,主要是选择,大题略看了一下,接下来就是再复习继续写题了。 1. 文件,抽象一个磁盘块集合 一个文件对应这一堆的 阅读全文
posted @ 2020-05-04 21:48 达达i 阅读(474) 评论(1) 推荐(0)
摘要:1. 引入文件,对磁盘使用的第三层抽象 2. 映射的作用 从文件是如何得到盘块号的,如果所示, 文件使用 连续结构 储存在磁盘上,文件的FCB(文件控制块)存储该文件的起始块号,和块数,根据这个就能知道对应的字符在那个盘块 用顺序存储的结构适合文件的直接读,不适合文件的动态增长, 类似于数组,如果要 阅读全文
posted @ 2020-05-01 21:57 达达i 阅读(240) 评论(0) 推荐(0)
摘要:1. 仍然是从硬件开始 2. 认识磁盘 3. 磁盘的IO过程 1. 磁头移动到相应的磁道上 2. 然后磁道开始旋转,转到相应的扇区 3. 此时再转的时候磁生电,磁信号就变成了电信号,然后就读回去 4. 读到了内存的缓冲区,将这个内存缓冲区修改一个字节, 5. 然后仍然到里面再转,此时是电生磁,再把字 阅读全文
posted @ 2020-04-26 22:03 达达i 阅读(420) 评论(0) 推荐(0)
摘要:终端设备包括显示器和键盘 1. 外设工作起来 2. 如何使用键盘? 3. 键盘处理 4. 小结 阅读全文
posted @ 2020-04-18 21:52 达达i 阅读(205) 评论(0) 推荐(0)
摘要:1. 让外设工作起来 只要给相应的控制器中的寄存器发一个指令 向设备控制器的寄存器写不就可以了吗? 需要查寄存器地址、内容的格式和语义、操作系统需要给用户提供一个简单视图 文件视图 ,这样方便 总的来说就是: 1. 形成文件视图 2. 发出out指令 3. 形成中断处理 中断处理:当CPU(中央处理 阅读全文
posted @ 2020-04-07 21:40 达达i 阅读(714) 评论(0) 推荐(0)
摘要:有换入就应该有换出 1. get_free_page ? 2. FIFO页面置换 D换A不合适,因为接下来A也要进行使用,所以应该换最近用不到的C合适 3. MIN页面置换 4. LRU页面置换 5. LRU的准确实现,用时间戳 A是第一个时刻使用,B是第二个时刻使用,C是第三个时刻使用,然后又是A 阅读全文
posted @ 2020-04-04 21:51 达达i 阅读(529) 评论(0) 推荐(1)
摘要:操作系统为了让用户使用,进行分段,但是效率不行,所以引出了分页,后来应该分段也应该分页,所以使用了虚拟内存,分段分页的核心就是虚拟内存,而要实现虚拟内存,就需要进行内存的换入和换出 1. 段页同时存在 2. 用户眼中的内存 3. 用换入、换出实现‘大内存’ 在用户眼中0 4G就是特别大的内存,相当于 阅读全文
posted @ 2020-04-01 21:41 达达i 阅读(538) 评论(0) 推荐(0)
摘要:段、页结合:程序员希望用段,物理内存希望用页,所以、、、 从虚拟内存中割出一个区域来给这个段,段就有了映射,但是这个虚拟内存不能正真的使用,需要把虚拟内存再映射一次,这个时候虚拟内存中的段分割成固定大小的页,每一页再去映射到物理内存中 1. 段、页同时存在 段面向用户,页面向硬件 2. 段页同时存在 阅读全文
posted @ 2020-03-28 21:51 达达i 阅读(660) 评论(0) 推荐(0)
摘要:1. 页表很大,页表的放置就成问题 当页表中的号不连续的时候,就要进行查找,其中的20就是代表每次访问一个地址,要额外查页表20次,这样效率又不高了 所以说页表中也不能只存放只存在用到的页,页号连续的话根据偏移一次就能找到 2. 多级页表 即页目录表(章)+页表(节) 3. 快表 多级页表提高了空间 阅读全文
posted @ 2020-03-24 19:22 达达i 阅读(4229) 评论(0) 推荐(2)
摘要:接下来的问题是内存怎么分割? 这样就可以将程序的各个段载入到相应的内存分区中 1. 固定分区与可变分区 2. 可变分区的管理过程 核心数据结构 请求分配 释放内存 再次申请 例题: 3. 引入分页 解决内存分区导致的内存效率问题 1. 可变分区造成的问题 2. 从连续到离散 3. 接下来就是页表 阅读全文
posted @ 2020-03-20 21:47 达达i 阅读(720) 评论(0) 推荐(0)
摘要:1. 从计算机如何工作开始 首先让程序进入内存 重定位:修改程序中的地址(是相对地址) 程序载入后还需要移动 重定位的最合适时机 运行时重定位 首先在内存中找一段空闲的内存,然后把这段空闲内存的地址找到例如起始地址1000,然后把这个1000赋给PCB,因为创建了进程自然就有了PCB,这个起始地址就 阅读全文
posted @ 2020-03-19 21:52 达达i 阅读(491) 评论(0) 推荐(0)
摘要:1. 死锁问题出现 2. 死锁的成因 3. 死锁的4个必要条件 4. 死锁处理方法 1. 死锁预防 2. 死锁避免 判断这次请求是否会引起死锁? 算法实现 死锁避免之银行家算法实例 请求出现时: 首先假装分配,然后调用银行家算法 3. 死锁检测+恢复: 发现问题再处理 例题: 4. 死锁忽略 阅读全文
posted @ 2020-03-18 22:03 达达i 阅读(415) 评论(0) 推荐(0)
摘要:1. 从纸上到实际 2. Linux 0.11读磁盘 申请缓冲区,启动读的命令,开始阻塞 3. sleep_on形成的队列 4. 唤醒 阅读全文
posted @ 2020-03-17 21:51 达达i 阅读(320) 评论(0) 推荐(0)
摘要:什么是信号量?通过对这个量的访问和修改,让大家有序推进 1. 共同修改信号量引出的问题 2. 竞争条件 3. 解决竞争条件的直观想法 4. 临界区 临界区:临界区是指进程中的一段需要访问共享资源并且另一个进程处于相应代码区域时便不会被执行的代码区域 互斥:当一个进程处于临界区并访问共享资源时,没有其 阅读全文
posted @ 2020-03-17 21:39 达达i 阅读(908) 评论(0) 推荐(0)
摘要:1. 进程合作 多个进程共同完成一个任务 每个进程有自己执行的一套方案,但不是每个程序都是可以随便执行的,有时候需要等待,有的进程会给它发一些信号,根据这些信号来决定是否继续执行 2. 生产者 消费者实例 那个地方需要停?那个地方需要走? 3. 只发信号还不能解决全部问题 问题的关键在于消费者仅仅是 阅读全文
posted @ 2020-03-14 21:39 达达i 阅读(728) 评论(0) 推荐(0)
摘要:1. Linux 0.11的调度函数schedule() 1. 也就是找到了counter最大的进程,然后就跳出去执行switch_to,对应上面的优先级算法,而counter本身也是时间片,也作了轮转调度 2. 现在就绪态的所有进程的时间片都用完了counter=0,右移+本身就是把counter 阅读全文
posted @ 2020-03-13 21:34 达达i 阅读(1156) 评论(0) 推荐(0)
摘要:1. 多进程图像与CPU调度 2. CPU调度的直观想法 3. 如何设计调度算法? IO约束型任务:前台任务,输入输出多,和用户有交互 CPU约束型任务:后台任务 4. 常见的三种调度算法 First Come , First Served (FCFS) 如何缩短周转时间? 1. 第一种:SJF(短 阅读全文
posted @ 2020-03-12 21:21 达达i 阅读(845) 评论(0) 推荐(0)
摘要:The mind is not a vessel that needs filling , but wood that needs igniting ! 1. 运转CPU 程序计数器pc 将pc置一个初值,然后取值执行,cpu就运转起来了 2. CPU没有好好运转 当遇到IO设备的时候,cpu得等待 阅读全文
posted @ 2020-03-11 21:13 达达i 阅读(446) 评论(0) 推荐(0)
摘要:1. 从某个中断开始 INT 0X80中断,进入内核 ,调用函数就是system_call ,接下来就是执行system_call 2. 五段论中的中断入口和中断出口以及schedule 1. 首先又压栈一些用户态的信息, 2. 接下来就是具体去处理sys_fork,也就是中断要产生的效果,但是在执 阅读全文
posted @ 2020-03-10 21:23 达达i 阅读(604) 评论(0) 推荐(0)
摘要:1. 和用户级相比,核心级线程有什么不同? 在用户级线程中,根据TCB(线程控制块)切换用户栈, 而核心级线程是,根据TCB(线程控制块)切换一套栈,切换用户栈和内核栈 2. 用户栈和内核栈之间的关联 进入内核栈的唯一方法是中断 例子: 3. 开始内核中的切换 switch_to 4. 内核线程sw 阅读全文
posted @ 2020-03-10 18:42 达达i 阅读(649) 评论(0) 推荐(0)