
操作系统
文章平均质量分 93
操作系统
却道天凉_好个秋
这个作者很懒,什么都没留下…
展开
-
操作系统(十五)——mmap
1. 概念mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。如下图所示:由上图可以看出,进程的虚拟地址空间,由多个虚拟内存区域构成。虚拟内存区域是转载 2021-05-04 18:55:56 · 588 阅读 · 0 评论 -
操作系统(十四)——CPU执行原理
1. 图灵机的工作方式要想知道程序执行的原理,我们可以先从「图灵机」说起,图灵的基本思想是用机器来模拟人们用纸笔进行数学运算的过程,而且还定义了计算机由哪些部分组成,程序又是如何执行的。图灵机长什么样子呢?你从下图可以看到图灵机的实际样子:图来源自:http://www.kristergustafsson.me/turing-machine/图灵机的基本组成如下:有一条「纸带」,纸带由一个个连续的格子组成,每个格子可以写入字符,纸带就好比内存,而纸带上的格子的字符就好比内存中的数据或转载 2021-04-29 22:48:47 · 1809 阅读 · 1 评论 -
操作系统(十三)——CPU Cache
1. CPU Cache你可能会好奇为什么有了内存,还需要 CPU Cache?根据摩尔定律,CPU 的访问速度每 18 个月就会翻倍,相当于每年增长 60% 左右,内存的速度当然也会不断增长,但是增长的速度远小于 CPU,平均每年只增长 7% 左右。于是,CPU 与内存的访问性能的差距不断拉大。到现在,一次内存访问所需时间是200~300多个时钟周期,这意味着 CPU 和内存的访问速度已经相差200~300多倍了。为了弥补 CPU 与内存两者之间的性能差异,就在 CPU 内部引入了 C...转载 2021-04-28 00:00:12 · 1772 阅读 · 0 评论 -
操作系统(十二)——文件系统(三)
前言磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的磁盘高速缓存区,可以有效的减少磁盘的访问次数。1. DMA技术在没有 DMA 技术前,I/O 的过程是这样的:CPU 发出对应的指令给磁盘控制器,然后返回; 磁盘控制器收到指令后,于是就开始准备数据,会把数据放入到磁盘控制器的内部缓冲区中,然后产生一个中断; CPU 收到中断信号转载 2021-04-25 22:22:42 · 352 阅读 · 0 评论 -
操作系统(十一)——文件系统(二)
1. 文件系统的结构前面提到 Linux 是用位图的方式管理空闲空间,用户在创建一个新文件时,Linux 内核会通过 inode 的位图找到空闲可用的 inode,并进行分配。要存储数据时,会通过块的位图找到空闲的块,并分配,但仔细计算一下还是有问题的。数据块的位图是放在磁盘块里的,假设是放在一个块里,一个块 4K,每位表示一个数据块,共可以表示4 * 1024 * 8 = 2^15个空闲块,由于 1 个数据块是 4K 大小,那么最大可以表示的空间为2^15 * 4 * 1024 = 2^27...转载 2021-04-25 20:55:31 · 473 阅读 · 0 评论 -
操作系统(十)——文件系统(一)
1. 文件系统的组成文件系统是操作系统中负责管理持久数据的子系统,说简单点,就是负责把用户的文件存到磁盘硬件中,因为即使计算机断电了,磁盘里的数据并不会丢失,所以可以持久化的保存文件。文件系统的基本数据单位是文件,它的目的是对磁盘上的文件进行组织管理,那组织的方式不同,就会形成不同的文件系统。Linux 最经典的一句话是:「一切皆文件」,不仅普通的文件和目录,就连块设备、管道、socket 等,也都是统一交给文件系统管理的。Linux 文件系统会为每个文件分配两个数据结构:索引节点(inde转载 2021-04-24 18:36:11 · 1741 阅读 · 0 评论 -
操作系统(九)——段页式内存管理和linux内存管理
1. 段页式内存管理内存分段和内存分页并不是对立的,它们是可以组合起来在同一个系统中使用的,那么组合起来后,通常称为段页式内存管理。段页式地址空间段页式内存管理实现的方式:先将程序划分为多个有逻辑意义的段,也就是前面提到的分段机制; 接着再把每个段划分为多个页,也就是对分段划分出来的连续空间,再划分固定大小的页;这样,地址结构就由段号、段内页号和页内位移三部分组成。用于段页式地址变换的数据结构是每一个程序一张段表,每个段又建立一张页表,段表中的地址是页表的起始地址,而页表中的地址转载 2021-04-22 21:38:16 · 1224 阅读 · 0 评论 -
操作系统(八)——虚拟内存、内存分段和内存分页
1. 虚拟内存首先拿我们大学时间使用过的单片机举例。单片机是没有操作系统的,所以每次写完代码,都需要借助工具把程序烧录进去,这样程序才能跑起来。另外,单片机的 CPU 是直接操作内存的「物理地址」在这种情况下,要想在内存中同时运行两个程序是不可能的。如果第一个程序在 2000 的位置写入一个新的值,将会擦掉第二个程序存放在相同位置上的所有内容,所以同时运行两个程序是根本行不通的,这两个程序会立刻崩溃。操作系统是如何解决这个问题呢?这里关键的问题是这两个程序都引用了绝对物理地址转载 2021-04-21 23:34:36 · 4445 阅读 · 5 评论 -
操作系统(七) -- 死锁
1. 由一个示例引出死锁多个进程在交替执行的时候,如果控制不好,就会出现死锁的情况;这个问题需要操作系统去处理。Producer(item){ P(mutex); P(empty); // 代码 V(mutex); V(full);}Consumer(){ P(mutex); P(full); // 代码 V(mutex); V(empty);}一种可能的调用顺序如下:当mutex=1,empty=0时,首先Producer(),然后Consum转载 2021-04-20 21:40:32 · 624 阅读 · 0 评论 -
操作系统(六) -- 多进程合作与信号量
前言多进程图像除了交替执行向前推进之外,还存在进程之间的合作;进程同步就是让这种进程之间的合作变得合理有序。如何实现合理有序要靠信号量。这篇文章包含以下常用多进程调度算法的理解,比如Peterson算法、面包店算法等。1. 多进程合作1.1 多进程共同完成一个任务司机:while(true){ 启动车辆; 正常运行; 到站停车;}售票员while(true){ 关门; 售票; 开门;}上面是司机和售票员这两个进程的内容。但是这两个进程的执行需要协调配合并不转载 2021-04-19 21:57:31 · 916 阅读 · 0 评论 -
操作系统(五) -- CPU的调度策略
1. CPU调度CPU调度就是当前进程需要进行IO操作或者时间片结束了,如何从就绪队列中选择下一个执行的过程。1.1 FIFO先入先出,根据队列的前后顺序执行。类似于银行和食堂排队,但是有问题,如果一个人只是简单的询问这样的算法肯定对他不公平。1.2Priority(优先级)给每个进程都设置优先级,根据优先级来选取下一个执行的进程。对于一些时间短的任务可以适当增加它的优先级,但是事先怎么知道它要执行多长时间也是个问题;而且如果一个人询问的时间越来越长怎么办?其实也就是不知道它具体的时间.转载 2021-04-18 22:29:20 · 1094 阅读 · 0 评论 -
操作系统(四) -- 用户级线程与核心级线程(线程的切换)
1. 线程切换的意义操作系统是多进程的,我们关注的应该是进程之间的切换,那为什么关注线程的切换呢?因为理解了线程的切换之后可以更好的理解进程的切换,换句话说线程的切换是进程切换的基础。每一个进程都包含一个映射表,如果进程切换了,那么程序选择的映射表肯定也不一样;进程的切换其实是包含两个部分的,第一个指令的切换,第二个映射表的切换。指令的切换就是从这段程序跳到另外一段程序执行,映射表切换就是执行不同的进程,所选择的映射表不一样。线程的切换只有指令的切换,同处于一个进程里面,不存在映射表的切换。进程的切转载 2021-04-17 21:53:08 · 1011 阅读 · 0 评论 -
操作系统(三) --CPU管理与多进程图像
前言操作系统里面有两个非常重要的图像,一个是多进程图像,另外一个就是文件管理图像。这一篇博客来和大家探讨一下什么是多进程图像,以及操作系统是如何支持多进程图像的。1. 多进程系统的由来多进程图像对操作系统非常重要,是操作系统的核心部分,明白了它之后对于操作系统就明白了一大部分。那么多进程图像是怎么想出来的呢?操作系统的核心就是管理硬件,CPU是计算机的核心硬件,操作系统就是在管理cpu的时候想出了多进程图像,并且通过多进程图像将cpu管理好了,CPU管理好了,其他硬件自然带动起来了,所以说转载 2021-04-15 23:06:12 · 301 阅读 · 0 评论 -
操作系统(二) -- 操作系统的接口与实现
前言前面说了操作系统启动时发生的事情,最后一个文件main.c中有这样一行代码:if(!fork()){init();}这行代码就是启动第一个进程,对于windows来说就是启动桌面,对于linux来说就是打开shell。这一篇文章说说操作系统的接口以及实现,即上层应用是如何穿过接口进入操作系统的。1. 操作系统的接口1.1 概念接口其实是一种抽象。比如插排,它将内部的电路全部封装起来,只提供两个插口,用电设备插上就能用;不用管插座内部是如何实现的。操作系统的接口也是如此,操作系统转载 2021-04-13 22:28:54 · 1519 阅读 · 0 评论 -
操作系统(一) -- 操作系统的启动(bootsect、setup、head、main)
1. 宏观认识操作系统1.1 什么是操作系统操作系统是底层计算机硬件与上层应用软件之间的一个软件,计算机的一切活动都是通过cpu、内存、显卡、显示器等硬件设备来实现的;那为什么我们平时操作计算机的时候从来都不用关心这些东西呢?在c语言里面为什么一个printf(“hello world!”);就可以在屏幕上面显示出”hello world”,而不需要关心cpu、内存这些东西呢?这都是因为有操作系统的存在,其实我们在printf(“hello world!”);的时候都是需要cpu、内存、显卡、总线等转载 2021-04-12 20:00:13 · 2005 阅读 · 1 评论