操作系统专栏
文章平均质量分 64
记录操作系统的相关知识
Currybeefer
理想是条不归路,不下战场才能赢
展开
-
【哈工大李治军操作系统听课笔记】L25 内存换出
1.页面换出实际上上一节所说的页面换入过程实际上还缺少一个环节。因为物理内存是有限的,且相比于虚拟内存而言要小得多,我们不可能一直能换入页面,找到空闲的,没有映射过的虚拟页。所以更符合实际的做法是,如果找到了空闲的虚拟页框就直接建立映射,否则就需要从已有的映射中找到一页物理页,将其换出,腾出空闲页框供操作系统换入新的物理页。2.基本页面换出算法先进先出FIFO先进先出的FIFO是最容易想到的,每次淘汰最先放入的那个物理页。但这当然不可能是足够高效的算法。最优置换算法OPT开天眼预知未来原创 2022-05-27 10:35:58 · 122 阅读 · 0 评论 -
【哈工大李治军操作系统听课笔记】内存换入-请求调页
1.内存换出的含义虚拟内存就是操作系统给进程提供的一个规整的,总长度为4GB(32位)的地址空间,这个进程可以随意访问这个空间的任何一个地址。但是由于实际的物理内存可能比4GB小,所以实际上这4GB的虚拟内存可能无法全部映射到物理内存上。这就需要内存换入和换出来解决这个问题。正因为这样的换入和换出,操作系统用一个小的物理内存来制造出一个大而规整的虚拟内存供进程使用。2.内存换入的详细过程何时进行内存换入?回忆段页式管理机制就会发现,在进程PC指针读到一个逻辑地址的时候,操作系统就会查段表算出虚拟原创 2022-05-27 10:33:47 · 99 阅读 · 0 评论 -
【哈工大李治军操作系统听课笔记】L23 段页结合的实际内存管理
1.实际上的内存管理机制前边讲了两种内存管理的机制,分别是分段和分页。从用户的角度,我们希望将程序分成若干段存入内存中,因为我们通常喜欢用“代码段的第50条指令”“数据段数组的第500个单元”等描述查找内容。但是从物理内存的角度来看,分页才是真正的好选择。因为分页可以避免分段产生的内存碎片问题,能提高物理内存的空间利用率。在实际的内存管理中,分段机制和分页机制其实是同时存在的,段面向用户,页面向硬件。那么如何做到这一点呢?查看图中的那个双向箭头,我们可以设计一种中间结构。一个程序用分段机制分成多个段原创 2022-05-26 07:20:52 · 249 阅读 · 0 评论 -
【哈工大李治军操作系统听课笔记】L22多级页表和快表:
1.分页机制存在的问题实际上分页机制存在问题,所以需要多级页表和快表辅助解决这个问题。分页机制主要的问题就是页表太大了….由于要提高内存空间的利用率,分出来的实际物理页应该是很小的(4K),但是页小了相应的页表就会变大。我们需要解决这个问题。2.方案一,去掉没有记录地址的页号。按照分页机制,一个程序的段会被分成好多个页。这个页的页号是由这个段的最大逻辑寻址空间决定的。32位系统中,一个程序段的逻辑地址是32位的,所以最大逻辑地址是2的32次方。每个页内存的大小为4K(2的12次方),因此32位逻原创 2022-05-25 23:33:36 · 371 阅读 · 0 评论 -
【哈工大李治军操作系统听课笔记】L21 内存分区与分页
1.内存分区遗留问题:上次的课内容中,没有讲如何在内存中找到一个空闲区域,将程序载入进去为了在内存中找到一个空闲的区域。自然想到需要维护一个数据结构,用于保存空闲的内存位置和长度。这就是空闲分区表。表的样子如图:同时我们还需要在这个表中找到一个可以被分配出去的空闲分区,这就需要用一个算法来提供帮助。由于这项工作的核心是分割内存区域,所以该算法被称作内存分区算法。又由于请求的内存大小是不固定的,所以该算法也被称为可变分区算法。分区算法大致有三种:首先适配,最佳适配以及最差适配。首先适配:最先找到空原创 2022-05-24 13:09:59 · 153 阅读 · 0 评论 -
【哈工大李治军操作系统听课笔记】L20 内存的使用与分段
1.取址,执行带来的问题用一个实际的例子来引出问题,现在有一个程序在编译成指令序列后存储在磁盘上,接下来这段程序从磁盘读入到内存中,设置PC指针开始执行程序,其第一个指令为”Call 40”。这条指令会执行PC=40,即让PC指针去地址为40处读取下一条指令。这个例子里下一条指令为”MOV 1,[300]”。要使得这个程序运行正确,那么”MOV 1,[300]”这条指令就必须放在地址为40的地方。那么也就意味着这个程序的起始地址必须是物理内存0处。但是我们知道物理内存0处存放的是操作系统。就算没有操作原创 2022-05-21 00:22:03 · 321 阅读 · 0 评论 -
【哈工大李治军操作系统听课笔记】L19 死锁的处理
1.死锁的含义死锁是多个进程在同步时由于互相等待对方向前执行而造成的谁也无法往前执行的僵局。线程和进程都有可能发生死锁。2.死锁发生的基本条件互斥:资源不能被共享(如临界区,共享缓存区,打印机等资源),一个资源每次只能被一个进程使用。不可剥夺:进程一旦获得资源,在未使用完之前,不能强行剥夺请求和保持:一个进程因请求资源而阻塞时,对已获得的资源保持不放循环等待:若干进程之间形成一种头尾相接的循环性资源等待关系一旦能够破坏这四个必要条件中的某个条件,就不会形成死锁,这就是死锁预防的基本想法。原创 2022-05-19 09:30:15 · 134 阅读 · 0 评论 -
【哈工大李治军操作系统听课笔记】L16 L17 进程同步与信号量
多个进程在操作系统中并发执行,这是操作系统的核心视图。但是多个进程在并发执行的时候并不是完全独立的,它们有时候需要互相依赖执行,操作系统需要提供一种机制来帮助进程实现这些依赖关系,这就是进程同步的问题。1.信号量信号量(semaphore)是操作系统用来解决并发中的互斥和同步问题的一种方法。信号量是一个整形变量,用来记录和进程同步有关的重要信息。其能够让进程阻塞睡眠在这个信号量上。需要同步的进程通过操作(加1或减1)信号量实现进程的阻塞与唤醒,即进程间的同步。信号量的详细解释参考这里:https:/原创 2022-05-17 11:46:34 · 169 阅读 · 0 评论 -
【哈工大李治军操作系统听课笔记】L14 CPU调用策略
1.PC机上CPU调度的三个基本准则任务周转时间:即任务从新建进入操作系统到该任务完成离开操作系统所经历的全部时间任务是响应时间:即从用户向某个程序发起一个交互操作到该任务相应这个操作之间经历的时间,例如单击菜单到菜单弹出这段时间系统吞吐量:即一段时间区域内计算机系统能完成的任务总数2.若干CPU调度的基本算法**前置知识:**如果操作系统支持线程,线程就是CPU调度的基本单位,否则进程就是CPU调度的基本单位。所以本节给出的调度方法既适用于线程也适用于进程,因此一下统一使用“任务”这个概念来论述原创 2022-05-17 02:04:11 · 256 阅读 · 0 评论 -
【哈工大李治军操作系统听课笔记】L11,L12. 内核级线程
1.用户级线程的缺点用户级线程时完全在用户态内存中创建的一个指令序列,及用户级线程的TCB,栈等内容都是创建在用户态中的,操作系统完全不知道当前进程里有多个线程的存在。那么如果一个用户级线程阻塞了,为了确保CPU不空转,操作系统很可能就会切换到另一个进程执行。也就是说,如果一个用户级线程在内核中阻塞了,则这个进程的的所有用户级线程将全部阻塞,这就限制了用户级线程的并发程度。从而限制了由并发性带来的计算机效率的提升。因此我们需要一种能让操作系统感知到其存在的线程形式,在一个线程阻塞时,操作系统懂得切换到原创 2022-04-09 05:28:45 · 1246 阅读 · 0 评论 -
【哈工大李治军操作系统听课笔记】L10. 用户级线程
1.进程与线程由于线程切换是进程切换的核心内容,且相对于进程切换更容易理解,所以我们先讲解线程切换。进程切换是由资源切换和指令流切换两部分组成的,其中资源切换是将分配给进程的非CPU以外的资源进行切换,如对当前的地址空间进行切换。而指令流切换是对CPU的切换,也就是线程切换。线程保留了并发的优点,避免了进程切换的代价。线程切换的实质就是映射表不变而PC指针不变。线程与进程的区别在于,一个进程可以有一个或多个线程,同一进程中的多个线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等原创 2022-04-09 05:20:42 · 369 阅读 · 0 评论 -
【哈工大李治军操作系统听课笔记】L9. 多进程图像
1.CPU管理和多进程视图有了进程的概念后,就可以用这个概念对CPU管理进行重新描述:CPU的工作原理就是取出指令,执行指令的过程。而执行起来的程序叫做进程。因此使用CPU和启动进程本质上是等价的。为了提高CPU的工作效率,操作系统会启动多个进程,并在多个进程中来回切换从何提高CPU的利用率,实现高效管理。多进程视图是操作系统的核心视图,操作系统从开机启动开始到最后关机的全部运行过程都是围绕着这个视图展开的。具体来说,在操作系统启动的main()函数最后,进程0会被创建出来,然后通过执行fork(原创 2022-04-04 05:03:29 · 285 阅读 · 0 评论 -
【哈工大李治军操作系统听课笔记】L8. CPU管理的直观想法
1.对CPU运行管理的直观想法一个基本的常识:CPU的工作原理就是不断地取指,执行,再取指,再执行的过程。因此管理CPU最直观的想法就是,直接设好PC指针需要指向的程序入口地址,然后让CPU不断地执行就完事。2.并发概念但是这样就会自然地发现一些问题。假设一个程序需要等待IO相应后才能继续执行下去,那么在等待响应的这段时间内,CPU就是完全空闲的状态。如果程序需要多次等待这种不需要CPU参与的相应,这不就造成了CPU资源的浪费了吗。我们发现,上边给出的“直观想法”虽然可以使得CPU运转起来,但是实原创 2022-04-04 04:16:28 · 673 阅读 · 0 评论 -
【哈工大李治军操作系统听课笔记】L5 系统调用的实现
1. 操作系统调用的直观想法之前说过,操作系统接口就是给操作系统调用的函数,那么这里假设有一个操作系统接口函数whoami(),调用这个函数就可以取出一串在操作系统中已经写好的字符串”linzhijun”。为什么不能直接访问该字符串,而是通过whoami()函数才能取出它呢?反正数据都在内存里边,为什么不能直接访问?因为如果可以直接访问,那就意味着上层程序:• 可以随意的调用数据, 可以随意的jmp。• 可以看到root密码, 可以修改它…• 可以通过显存看到别 人word里的内容…而这样做原创 2022-04-02 14:13:17 · 585 阅读 · 0 评论 -
【哈工大李治军操作系统听课笔记】L4 操作系统的接口
用户使用计算机的方式(1) 命令行命令行:就是一堆程序,增加了一些重要的函数,从而对计算机的硬件进行一些重要的使用。(函数是比较重要的)在操作系统启动后,第一个启动的程序叫做shell,这是一个永远不会停止的while循环,具体代码如下:(2) 图形按钮用户点击图形按钮后,操作系统就会使用消息循环调用系统消息的函数(下图中黄色部分的),从消息队列中不断取出消息,一个消息对应一个消息处理函数,这就是“消息处理机制”。(3) 应用程序和图形按钮的实现机制类似。什么是操作系统接口一言以蔽之原创 2022-04-02 14:10:33 · 364 阅读 · 0 评论 -
【哈工大李治军操作系统听课笔记】L2,L3 操作系统启动
计算机启动时操作系统做的详细工作操作系统启动之后,pc指针首先指向BIOS区,检测RAM,键盘,显示器,软硬磁盘是否正常运作,之后会把磁盘0磁道0扇区的256字节的引导启动代码放到内存0x7c00处,PC ( PCurr指针 )指该内存地址处开始运行。该引导代码用汇编而不是用C语言,因为C语言的代码编译之后,它的内存位置是人为不可控的(比如自动分配栈),而汇编可以。引导启动代码的第一步是:(1)把256字节的代码从0x7c00处移动到0x9000处。然后从0x9000处开始运行。(2)运行一开.原创 2022-04-02 14:08:05 · 436 阅读 · 0 评论 -
【哈工大李治军操作系统听课笔记】L1 什么是操作系统
1.操作系统的定义:操作系统是安装在计算机硬件之上的一个实实在在的软件,人们通过这个软件可以方便高效地使用计算机的硬件。2.操作系统可以:• 方便我们使用硬件,如使用显存…• 高效的使用硬件,如开多个终端(窗口)o 管理哪些硬件 CPU管理 内存管理 终端管理 磁盘管理 文件管理 ——五基本功能(本课程重点) 网络管理 电源管理 多核管理**3.课程目标:**进入操作系统,理解操作系统的真实运转方式。...原创 2022-04-02 14:06:39 · 146 阅读 · 0 评论