
操作系统
文章平均质量分 88
海岸星的清风
这个作者很懒,什么都没留下…
展开
-
大话操作系统(1)虚拟内存
文章目录虚拟内存一个问题操作系统是如何解决这个问题呢?操作系统是如何管理虚拟地址与物理地址之间的关系?虚拟内存一个问题单⽚机是没有操作系统的,所以每次写完代码,都需要借助⼯具把程序烧录进去,这样程序才能跑起来。另外,单⽚机的 CPU 是直接操作内存的「物理地址」。在这种情况下,要想在内存中同时运⾏两个程序是不可能的。如果第⼀个程序在 2000 的位置写⼊⼀个新的值,将会擦掉第⼆个程序存放在相同位置上的所有内容,所以同时运⾏两个程序是根本⾏不通的,这两个程序会⽴刻崩溃。操作系统是如何解决这个问题呢原创 2022-02-27 16:43:57 · 386 阅读 · 0 评论 -
大话操作系统(2)内存分段
内存分段程序是由若⼲个逻辑分段组成的,如可由代码分段、数据分段、栈段、堆段组成。不同的段是有不同的属性的,所以就⽤分段(Segmentation)的形式把这些段分离出来。分段机制下,虚拟地址和物理地址是如何映射的?分段机制下的虚拟地址由两部分组成,段选择⼦和段内偏移量。段选择⼦就保存在段寄存器⾥⾯。段选择⼦⾥⾯最重要的是段号,⽤作段表的索引。段表⾥⾯保存的是这个段的基地址、段的界限和特权等级等。虚拟地址中的段内偏移量应该位于 0 和段界限之间,如果段内偏移量是合法的,就将段基地址加上段内偏移量得原创 2022-02-27 16:50:22 · 368 阅读 · 0 评论 -
大话操作系统(3)内存分页
内存分页分段的好处就是能产⽣连续的内存空间,但是会出现内存碎⽚和内存交换的空间太⼤的问题。要解决这些问题,那么就要想出能少出现⼀些内存碎⽚的办法。另外,当需要进⾏内存交换的时候,让需要交换写⼊或者从磁盘装载的数据更少⼀点,这样就可以解决问题了。这个办法,也就是内存分⻚(Paging)。分⻚是把整个虚拟和原创 2022-02-27 17:04:46 · 462 阅读 · 0 评论 -
大话操作系统(4)段页式内存管理
文章目录段页式内存管理段页式内存管理内存分段和内存分⻚并不是对⽴的,它们是可以组合起来在同⼀个系统中使⽤的,那么组合起来后,通常称为段⻚式内存管理。段⻚式内存管理实现的⽅式:先将程序划分为多个有逻辑意义的段,也就是前⾯提到的分段机制;接着再把每个段划分为多个⻚,也就是对分段划分出来的连续空间,再划分固定⼤⼩的⻚;这样,地址结构就由段号、段内⻚号和⻚内位移三部分组成。⽤于段⻚式地址变换的数据结构是每⼀个程序⼀张段表,每个段⼜建⽴⼀张⻚表,段表中的地址是⻚表的起始地址,⽽⻚表中的地址则为某⻚的物原创 2022-02-27 20:35:30 · 206 阅读 · 0 评论 -
大话操作系统(5)Linux 内存管理
文章目录Linux 内存管理Linux 操作系统采⽤了哪种⽅式来管理内存呢?Linux 的虚拟地址空间是如何分布的?总结Linux 内存管理Linux 操作系统采⽤了哪种⽅式来管理内存呢?在回答这个问题前,我们得先看看 Intel 处理器的发展历史。早期 Intel 的处理器从 80286 开始使⽤的是段式内存管理。但是很快发现,光有段式内存管理⽽没有⻚式内存管理是不够的,这会使它的 X86 系列会失去市场的竞争⼒。因此,在不久以后的 80386 中就实现了对⻚式内存管理。也就是说,80386 除了原创 2022-02-27 20:55:17 · 580 阅读 · 0 评论 -
大话操作系统(6)内存页面置换算法
内存页面置换算法在了解内存⻚⾯置换算法前,我们得先谈⼀下缺⻚异常(缺⻚中断)。缺页中断当 CPU 访问的⻚⾯不在物理内存时,便会产⽣⼀个缺⻚中断,请求操作系统将所缺⻚调⼊到物理内存。那它与⼀般中断的主要区别在于:缺⻚中断在指令执⾏「期间」产⽣和处理中断信号,⽽⼀般中断在⼀条指令执⾏「完成」后检查和处理中断信号。缺⻚中断返回到该指令的开始重新执⾏「该指令」,⽽⼀般中断返回回到该指令的「下⼀个指令」执⾏。我们来看⼀下缺⻚中断的处理流程,如下图:在 CPU ⾥访问⼀条 Load M 指令,然后原创 2022-02-28 11:47:32 · 342 阅读 · 0 评论 -
大话操作系统(7)进程的状态和控制结构
文章目录进程基础知识概念并发和并⾏有什么区别?进程与程序的关系进程的状态进程基础知识概念我们编写的代码只是⼀个存储在硬盘的静态⽂件,通过编译后就会⽣成⼆进制可执⾏⽂件,当我们运⾏这个可执⾏⽂件后,它会被装载到内存中,接着 CPU 会执⾏程序中的每⼀条指令,那么这个运⾏中的程序,就被称为「进程」(Process)。现在我们考虑有⼀个会读取硬盘⽂件数据的程序被执⾏了,那么当运⾏到读取⽂件的指令时,就会去从硬盘读取数据,但是硬盘的读写速度是⾮常慢的,那么在这个时候,如果 CPU 傻傻的等硬盘返回数据的话,原创 2022-02-28 16:45:43 · 812 阅读 · 0 评论 -
大话操作系统(8)进程的控制和上下文切换
文章目录进程的控制创建进程终⽌进程阻塞进程唤醒进程进程的上下文切换在详细说进程上下⽂切换前,先来看看 CPU 上下⽂切换进程的上下⽂切换到底是切换什么呢?发⽣进程上下⽂切换有哪些场景?进程的控制我们熟知了进程的状态变迁和进程的数据结构 PCB 后,再来看看进程的创建、终⽌、阻塞、唤醒的过程,这些过程也就是进程的控制。创建进程操作系统允许⼀个进程创建另⼀个进程,⽽且允许⼦进程继承⽗进程所拥有的资源,当⼦进程被终⽌时,其在⽗进程处继承的资源应当还给⽗进程。同时,终⽌⽗进程时同时也会终⽌其所有的⼦进程。原创 2022-02-28 18:19:53 · 397 阅读 · 0 评论 -
大话操作系统(9)线程基础知识
文章目录什么是线程?线程的优缺点?线程与进程的⽐较线程的上下⽂切换线程上下⽂切换的是什么?线程的实现什么是线程?线程是进程当中的⼀条执⾏流程。同⼀个进程内多个线程之间可以共享代码段、数据段、打开的⽂件等资源,但每个线程各⾃都有⼀套独⽴的寄存器和栈,这样可以确保线程的控制流是相对独⽴的。线程的优缺点?线程的优点:⼀个进程中可以同时存在多个线程;各个线程之间可以并发执⾏;各个线程之间可以共享地址空间和⽂件等资源;线程的缺点:当进程中的⼀个线程崩溃时,会导致其所属进程的所有线程崩溃。举个例原创 2022-02-28 18:49:33 · 538 阅读 · 0 评论 -
大话操作系统(10)进程调度算法
文章目录调度概念调度时机调度原则调度算法先来先服务调度算法最短作业优先调度算法⾼响应⽐优先调度算法时间⽚轮转调度算法最⾼优先级调度算法多级反馈队列调度算法调度概念进程都希望⾃⼰能够占⽤ CPU 进⾏⼯作,那么这涉及到前⾯说过的进程上下⽂切换。⼀旦操作系统把进程切换到运⾏状态,也就意味着该进程占⽤着 CPU 在执⾏,但是当操作系统把进程切换到其他状态时,那就不能在 CPU 中执⾏了,于是操作系统会选择下⼀个要运⾏的进程。选择⼀个进程运⾏这⼀功能是在操作系统中完成的,通常称为调度程序(schedule原创 2022-02-28 20:42:12 · 376 阅读 · 0 评论 -
大话操作系统(11)进程间通信
文章目录进程间通信管道那管道如何创建呢,背后原理是什么?消息队列共享内存信号量信号进程间通信管道如果你学过 Linux 命令,那你肯定很熟悉「 | 」这个竖线。$ ps auxf | grep mysql上⾯命令⾏⾥的「 | 」竖线就是⼀个管道,它的功能是将前⼀个命令( ps auxf )的输出,作为后⼀个命令( grep mysql )的输⼊,从这功能描述,可以看出管道传输数据是单向的,如果想相互通信,我们需要创建两个管道才⾏。同时,我们得知上⾯这种管道是没有名字,所以「 | 」表示的管道称原创 2022-03-01 11:52:01 · 367 阅读 · 0 评论 -
大话操作系统(12)经典同步问题
文章目录经典同步问题哲学家就餐问题方案一方案二方案三方案四读者-写者问题方案一:读者优先方案二:写者优先⽅案三:公平策略经典同步问题哲学家就餐问题先来看看哲学家就餐的问题描述:5 个⽼⼤哥哲学家,闲着没事做,围绕着⼀张圆桌吃⾯;巧就巧在,这个桌⼦只有 5 ⽀叉⼦,每两个哲学家之间放⼀⽀叉⼦;哲学家围在⼀起先思考,思考中途饿了就会想进餐;奇葩的是,这些哲学家要两⽀叉⼦才愿意吃⾯,也就是需要拿到左右两边的叉⼦才进餐;吃完后,会把两⽀叉⼦放回原处,继续思考;那么问题来了,如何保证哲 学家们的动原创 2022-03-03 10:13:48 · 563 阅读 · 0 评论 -
大话操作系统(13)锁
文章目录死锁死锁的概念避免死锁问题的发⽣总结死锁死锁的概念在多线程编程中,我们为了防⽌多线程竞争共享资源⽽导致数据错乱,都会在操作共享资源之前加上互斥锁,只有成功获得到锁的线程,才能操作共享资源,获取不到锁的线程就只能等待,直到锁被释放。那么,当两个线程为了保护两个不同的共享资源⽽使⽤了两个互斥锁,那么这两个互斥锁应⽤不当的时候,可能会造成两个线程都在等待对⽅释放锁,在没有外⼒的作⽤下,这些线程会⼀直相互等待,就没办法继续运⾏,这种情况就是发⽣了死锁。死锁只有同时满⾜以下四个条件才会发⽣:互斥条原创 2022-03-03 10:43:09 · 544 阅读 · 0 评论 -
大话操作系统(14)文件系统
文章目录文件系统的基本组成⽬录项和⽬录是⼀个东⻄吗?那⽂件数据是如何存储在磁盘的呢?虚拟文件系统文件的使用文件的存储连续空间存放⽅式⾮连续空间存放⽅式链表方式索引方式Unix ⽂件的实现⽅式空闲空间管理空闲表法空闲链表法位图法文件系统的结构目录的存储软链接和硬链接文件系统的基本组成⽂件系统是操作系统中负责管理持久数据的⼦系统,说简单点,就是负责把⽤户的⽂件存到磁盘硬件中,因为即使计算机断电了,磁盘⾥的数据并不会丢失,所以可以持久化的保存⽂件。⽂件系统的基本数据单位是⽂件,它的⽬的是对磁盘上的⽂件进⾏组原创 2022-03-03 14:40:12 · 1534 阅读 · 0 评论 -
大话操作系统(15)磁盘调度算法
文章目录磁盘调度算法先来先服务算法FCFS最短寻道时间优先算法SSF扫描算法SCAN循环扫描算法C-SCANLOOK 与 C-LOOK 算法磁盘调度算法磁盘的结构,如下图:常⻅的机械磁盘是上图左边的样⼦,中间圆的部分是磁盘的盘⽚,⼀般会有多个盘⽚,每个盘⾯都有⾃⼰的磁头。右边的图就是⼀个盘⽚的结构,盘⽚中的每⼀层分为多个磁道,每个磁道分多个扇区,每个扇区是 512 字节。那么,多个具有相同编号的磁道形成⼀个圆柱,称之为磁盘的柱⾯,如上图⾥中间的样⼦。磁盘调度算法的⽬的很简单,就是为了提⾼磁盘的访问原创 2022-03-03 15:32:29 · 373 阅读 · 0 评论 -
大话操作系统(16)I/O管理
文章目录设备控制器I/O 控制方式设备驱动程序通⽤块层存储系统 I/O 软件分层键盘敲⼊字⺟时,期间发⽣了什么?设备控制器我们的电脑设备可以接⾮常多的输⼊输出设备,⽐如键盘、⿏标、显示器、⽹卡、硬盘、打印机、⾳响等等,每个设备的⽤法和功能都不同,那操作系统是如何把这些输⼊输出设备统⼀管理的呢?为了屏蔽设备之间的差异,每个设备都有⼀个叫设备控制器(Device Control) 的组件,⽐如硬盘有硬盘控制器、显示器有视频控制器等。因为这些控制器都很清楚的知道对应设备的⽤法和功能,所以 CPU 是通过原创 2022-03-03 20:05:02 · 406 阅读 · 0 评论 -
大话操作系统(17)文件 I/O
文章目录文件 I/O缓冲与⾮缓冲 I/O直接与⾮直接 I/O阻塞与⾮阻塞 I/O VS 同步与异步 I/O文件 I/O⽂件的读写⽅式各有千秋,对于⽂件的 I/O 分类也⾮常多,常⻅的有缓冲与⾮缓冲 I/O直接与⾮直接 I/O阻塞与⾮阻塞 I/O VS 同步与异步 I/O接下来,分别对这些分类讨论讨论。缓冲与⾮缓冲 I/O⽂件操作的标准库是可以实现数据的缓存,那么根据「是否利⽤标准库缓冲」,可以把⽂件 I/O 分为缓冲I/O 和⾮缓冲 I/O:缓冲 I/O,利⽤的是标准库的缓存实现⽂件原创 2022-03-08 10:39:22 · 168 阅读 · 0 评论 -
大话操作系统(18)socket ⽹络模型
文章目录最基本的 Socket 模型内核⾥的数据结构如何服务更多的⽤户?多进程模型多线程模型I/O 多路复⽤select/poll selectepoll总结以最简单 socket ⽹络模型,⼀步⼀步的过度到 I/O 多路复⽤。最基本的 Socket 模型要想客户端和服务器能在⽹络中通信,那必须得使⽤ Socket 编程,它是进程间通信⾥⽐较特别的⽅式,特别之处在于它是可以跨主机间通信。Socket 的中⽂名叫作插⼝,咋⼀看还挺迷惑的。事实上,双⽅要进⾏⽹络通信前,各⾃得创建⼀个Socket,这相当原创 2022-03-20 09:57:03 · 3516 阅读 · 0 评论 -
大话操作系统(19)⾼性能⽹络模式:Reactor 和 Proactor
文章目录演进Reactor单 Reactor 单进程 / 线程单 Reactor 多线程 / 多进程多 Reactor 多进程 / 线程Proactor总结演进如果要让服务器服务多个客户端,那么最直接的⽅式就是为每⼀条连接创建线程。其实创建进程也是可以的,原理是⼀样的,进程和线程的区别在于线程⽐较轻量级些,线程的创建和线程间切换的成本要⼩些,为了描述简述,后⾯都以线程为例。处理完业务逻辑后,随着连接关闭后线程也同样要销毁了,但是这样不停地创建和销毁线程,不仅会带来性能开销,也会造成浪费资源,⽽且如果原创 2022-03-20 10:42:49 · 1845 阅读 · 0 评论