
操作系统概念
rv0p111
之前由于一些原因博客没有更新,现在还是正常更新,继续分享..
展开
-
磁盘中的坏块
绝大多数磁盘从工厂里出来时就有坏块。根据所使用的磁盘和控制器,对这些块有多种处理方式对于简单的磁盘,如使用IDE控制器的磁盘,可以手动处理坏扇区。比如MS-DOS format命令执行逻辑格式化,它将扫描磁盘以查找坏扇区。如果format找到坏扇区,那么它就会在相应的FAT条目中写上特殊的值以通知分配程序不要使用该块 下面简单介绍下FATFAT其实就是文件分配表,这是一种采用链接...原创 2018-06-11 09:12:53 · 1824 阅读 · 0 评论 -
文件存储管理
由于内存太小,并不足够永久的去保存所有的数据和程序,所以计算机系统必须提供外存以备份内存,现在主要是通过采用磁盘作为主要在线存储以保存信息(程序与数据) 文件系统为存储与访问磁盘上的数据与程序提供机制,文件是一组由创建者所定义的相关信息的集合,操作系统将文件映射到物理设备上。文件通常按目录来组织,以便于使用计算机设备在很多方面都有不同,有的设备一次传输一个或者一块字符。有的按顺序访问...原创 2018-06-01 17:52:36 · 934 阅读 · 1 评论 -
分区和安装
分区可以是没有文件系统的(没有文件系统的分区称为生分区),当然也可以是含有文件系统的,在UNIX交换空间可以使用生分区,因为它使用的不是文件系统而是使用自己的磁盘格式 引导信息可以保存在各个分区当中,它有自己的格式,因为在引导系统启动之时是没有文件系统设备驱动程序的,所以是不能解释文件系统格式的,所以引导信息通常为一组有序块,并且作为镜像文件读入内存,该镜像文件按预先指定的位置如第一个字节...原创 2018-06-08 14:26:41 · 202 阅读 · 0 评论 -
CPU轮询和中断机制
主机和控制器之间交互的完成协议可能会很复杂,我们可以用两个位来协调控制器和主机之间的生产者和消费者之间的关系,控制器工作忙的时候就把状态寄存器的忙位设置为1,而如果控制器可以接收下一条指令的时候就清除忙位。如果是主机就是通过命令寄存器中命令就绪位来表示其意愿,当主机有命令需要控制器执行的时候就设置命令就绪位 当主机需要通过端口来写输出数据的时候,主机和控制器之间握手协调如下所示...原创 2018-06-14 17:50:05 · 2752 阅读 · 0 评论 -
磁盘构造浅析
每个磁盘片都是扁平圆盘和CD一样,每个磁盘片的两面都涂着磁质材料,通过磁片上进行磁记录就可以保存信息了 磁头位于每个磁盘片的表面上,磁头与磁臂相连,磁臂能将所有磁头作为一个整体而一起移动,磁盘片的表面被逻辑地划分成圆形磁道(track),磁道再进一步划分为扇区。位于同一磁臂位置的磁道集合形成了柱面(cylinder),每个磁盘驱动器都有数千个同心柱面,每个磁道可能包括数百个扇区。常用磁盘驱...原创 2018-06-07 07:16:16 · 2376 阅读 · 0 评论 -
I/O输入系统概述
由于I/O设备众多,而且每个不同的I/O设备的细节和特点是不同的,操作系统内核是设计成使用设备驱动程序模块的结构,设备驱动程序为I/O子系统提供了统一的设备接口 设备和计算机之间的通信其实是可以通过电缆甚至是空气来传递信息的,设备和计算机通信通过一个连接点(或端口),例如串行端口,如果一个或多个设备使用一组共同的线,那么这种连接称为总线总线其实是一组线和一组严格定义的可以描述在线上传...原创 2018-06-13 19:11:46 · 490 阅读 · 0 评论 -
操作系统习题
主要做一个整理1.1、在多道程序和分时环境中,多个用户同时共享一个系统,这种情况导致多种安全问题。a. 列出此类的问题 b.在一个分时机器中,能否确保像在特殊用途系统中一样确认同样的安全程序,并解释之 先简单的介绍下分时系统,分时是指多个用户分享使用同一台计算机。多个程序分时共享硬件和软件资源。分时操作系统是指在一台主机上连接多个带有显示器和键盘的终端,同时允许多个用户通过主机...原创 2018-06-21 11:29:18 · 9113 阅读 · 0 评论 -
内核内存的分配
当用户态进程需要额外内存的时候,可以从内核所维护的空闲页帧链表中获取页,该链表通常由页替换算法来更新,这些页帧通常分散在物理内存当中,如果用户只需要一个字节的内存,那么会产生内存碎片,这是因为进程会得到整个页帧 内核内存的分配通常是从空闲内存池中获取的,而并不是从满足普通用户模式进程的内存链表中获取的,主要有两个原因1、内核需要为不同大小的数据结构分配内存,其中有的不到一页,因此内...原创 2018-05-30 15:57:08 · 1345 阅读 · 0 评论 -
内存映射文件
利用虚拟内存技术将文件I/O作为普通内存访问的方法叫做文件的内存映射文件的内存映射可以将一个磁盘块映射成内存的一页(或多页)。开始的文件访问是按照普通请求页面调度来进行的,这样的话就会产生页错误,因为页上没有相应的内容,这样的话,一页大小的部分文件从文件系统读入物理页(有的系统会一次读入多个一页大小的内容)。这样之后的文件的读写就会按照通常的内存访问来处理,这样的话就简化了文件访问和使...原创 2018-05-30 14:15:41 · 279 阅读 · 0 评论 -
虚拟文件系统VFS
现代操作系统必须同时支持多个文件系统,操作系统如何将多个文件系统整合成一个目录结构?用户如何在访问文件系统空间时可以无缝地在文件系统类型之间移动呢?绝大多数操作系统包括UNIX都使用面向对象技术来简化、组织和模块化实现过程,使用这些方法允许不同文件系统类型可通过同样结构来实现,这也包括了网络文件系统类型如NFS,这样用户可以轻松的访问位于本地磁盘的多个文件系统类型,甚至位于网络上的文件...原创 2018-06-08 19:13:59 · 1038 阅读 · 0 评论 -
直接内存访问DMA
如果我们要在磁盘拷贝大量文件的话,我们如果用CPU来进行控制的话,这就显着有点浪费了,因为CPU还有其他很重要的事情要处理,所以很多计算机为了减去CPU的负担,就把一部分任务下放给一个专用的处理器,称为DMA控制器 我们在进行DMA传输的时候,主机向内存中写入DMA命令块,这个块当中包括传输的源地址指针、传输的目的地址指针、传输的字节数CPU在将这个命令块的地址写入到DMA控制器的时...原创 2018-06-16 11:22:01 · 910 阅读 · 0 评论 -
时钟和定时器
目前很多系统都有硬件时钟和定时器来提供一些函数,比如说设置定时器在A时刻去猝发操作X,比如说获取当前时间,获取已经逝去的时间 测量逝去的时间和触发操作的硬件称为可编程间隔定时器(programmable interval timer)。它可被设置为等待一定的时间,然后去触发中断,它也可以设置成做一次或重复多次,以产生周期性中断,调度程序可以使用这种机制来产生中断,以抢占时间片用完的进程...原创 2018-06-16 13:33:19 · 1190 阅读 · 0 评论 -
计算机启动引导块
一般来说计算机启动的时候都需要运行一个初始化程序,这个初始化程序做的事情就是初始化系统的各个方面,从CPU寄存器到设备控制器和内存,然后启动操作系统。所以初始化程序需要找到磁盘上的操作系统内核,装入内存,并且需要转到起始地址,从而开始操作系统的执行绝大多数操作系统只会在启动ROM(只读存储器)中保留一个很小的初始化加载程序,这个程序的作用就是可以从磁盘上调入更为完整的初始化程序,因为如...原创 2018-06-11 08:42:56 · 2132 阅读 · 0 评论 -
基于日志结构的文件系统
简单概述基于日志的面向事务文件系统其实和数据库的基于日志恢复算法可以称为不同领域的算法的不同实现,但其实道理都是一样的 下面我们先去了解下什么是事务执行单个逻辑功能的一组指令或操作称为事务。处理事务的主要问题是不管出现什么计算机系统的可能失败,都要保证事务的原子性。原子性简单来说就是一件事情要么完全执行,要么什么也不做基于日志的恢复确保原子性的一种方法就是在稳定存储上记录...原创 2018-06-10 18:34:57 · 1865 阅读 · 0 评论 -
空闲空间管理
因为磁盘空间是有限的,所以我们会需要将被删除的文件的空间用于新文件。为了记录空闲磁盘空间,系统需要去维护一个空闲空间链表(free-space list)。空闲空间链表记录了所有空闲的磁盘空间,也就是未分配给文件或目录的空间当我们去创建一个文件的时候,搜索空闲空间链表以得到所需要的空间,并且将其分配新文件。这些空间会从空闲空间链表中删除。当删除文件的时候,其磁盘空间会增加到空闲空间表上...原创 2018-06-10 15:31:51 · 2292 阅读 · 0 评论 -
I/O文件的具体操作
对于一个磁盘来说,文件系统是通过文件目录从文件名来进行映射,从而得到了文件的空间分配,比如说MS-DOS将文件名映射为一个数,这个数显示了文件访问表的一个条目,这个条目说明了哪些磁盘块被分配给文件。在UNIX当中将文件名映射为inode号,相应的inode包含了空间分配信息从文件名到磁盘控制器的连接是如何建立的?下面就举个例子来说明 在MS-DOS当中,其文件名在冒号前的部分有...原创 2018-06-18 10:28:15 · 474 阅读 · 0 评论 -
内核数据结构
内核需要保存I/O组件使用的状态信息,可以通过若干内核数据结构比如说文件打开表等来完成 UNIX系统中在读取一个用户文件的时候,内核需要去检查下缓存,然后再去决定是否执行磁盘I/O,在读一个进程镜像时候,内核只需要从内存当中读取数据UNIX当中采用面向面向对象的技术采用统一结构来封装这些差异,有的操作系统当中是广泛的使用了面向对象的方法。例如Window NT的I/O采用消息传递来实...原创 2018-06-18 09:57:02 · 610 阅读 · 0 评论 -
I/O内核的子系统
基本概念 内核提供了许多和I/O有关的服务。像调度、缓冲、高速缓存、假脱机、设备预留以及错误处理是由内核I/O子系统提供的并且是建立在硬件和设备驱动程序结构之上的,I/O子系统还负责保护自己免受错误进程和恶意用户的危害下面简单的介绍下I/O的调度 其实调度I/O请求就是确定一个合适的顺序来执行这些请求,如果调用的顺序选择的合理,那么调度就能改善系统整体性能,能够在进程之间公平...原创 2018-06-18 09:45:23 · 1262 阅读 · 0 评论 -
阻塞和非阻塞I/O
下面就简单的介绍下阻塞和非阻塞I/O的区别当应用程序发出一个阻塞系统调用的时候,应用程序的执行就会被挂起,应用程序是会从操作系统的运行队列移到等待队列上,当系统调用完成之后,应用程序就会移回到运行队列,可以继续执行并能收到系统调用返回的值对于非阻塞的I/O,其实一个例子就是一个视频应用程序,它用来从磁盘文件上读取帧,同时解压缩并在显示器上进行输出 我们的进程当中有可能含有多...原创 2018-06-17 22:32:22 · 494 阅读 · 0 评论 -
目录实现(概述)
最为简单的目录实现方法其实就是使用存储文件名和数据块指针的线性列表,这种方法编程实现比较简单,但是运行的时候就会费时,就比如说我们要创建新文件必须要去搜索目录以确定没有同意名称的文件存在如果我们要去新增加一个目录的话,要删除文件的时候,根据给定文件名搜索目录,接着释放分配给它的空间。如果要重用目录条目,我们有很多方法,比如说可以将目录条目标记为不再使用(为每个目录条目增加一个使用-非使用位)或...原创 2018-06-10 14:21:03 · 931 阅读 · 0 评论 -
文件系统的实现(概念)
在提到文件系统的实现概念之前,我们应该先明确一点,就是磁盘可以分为一个或者多个分区,一个卷可以横跨多个磁盘上的数个分区,每个卷可包括一个文件系统或无文件系统的生区,生区的意思就是没有文件系统的意思 在磁盘上,文件系统可能会包含这些信息: 如何启动所存储的操作系统、总的块数、空闲块的数目和位置、目录结构以及各个具体文件等每个卷都有一个引导控制块,主要包括系统从这个卷当中引导操作系统所需...原创 2018-06-06 13:48:22 · 1017 阅读 · 0 评论 -
文件系统结构
文件系统提供了在线存储和访问包括数据和程序在内的的文件内容的机制,文件系统永久地驻留在外存上,外存可以永久存储大量数据磁盘提供大量的外存空间来维持文件系统,磁盘有以下的两个特点,使其成为存储多个文件的方便介质1、可以原地重写,可以从磁盘上读一块,修改该块,并将它写回到原来的位置2、可以直接访问磁盘上的任意一块信息。因此,可以方便地按顺序或随机地访问文件,从一个文件切换到另一个文...原创 2018-06-05 20:34:18 · 720 阅读 · 0 评论 -
操作系统的shell
简单介绍 操作系统其实是由多个功能模块组成的庞大、复杂的软件系统。在任何通用的操作系统中都需要去提供一个叫shell(外壳)的程序,我们就可以使用这个程序来操作计算机系统进行工作,其实我们所使用的可以在终端中输入命令,其实就是由命令行解释器进行解释运行的在DOS中有一个程序叫做command.com,这个程序在DOS中被称为命令解释器,也就是DOS系统的shell。DOS启动的时...原创 2018-04-25 13:56:30 · 3098 阅读 · 0 评论 -
动态加载和动态链接库
动态加载 由于之前进程的整个程序和数据必须处于物理内存当中,因此进程的大小受物理内存大小的限制。为了获得更好的内存空间使用率的话,我们可以去使用动态加载。采用动态加载,一个子程序只有在调用的时候才会被加载,所有的子程序都以可重定位的方式保存在磁盘上。主程序装入内存并且去执行,当一个子程序需要调用另一个子程序的时候,调用子程序的时候回先去检查另一个子程序是否已经加载,如果没有的话,就让...原创 2018-05-09 15:46:48 · 1958 阅读 · 0 评论 -
操作系统内存地址映射
内存管理的机制这里主要是做个知识点的记录,方便以后查看 内存是现代计算机的运行的中心,内存是由很大的一组字或者是字节组成的,每个字或者是字节都是有它们自己的地址,以及CPU会根据程序计数器(PC)的值从内存中提取指令,这些指令可能会引起进一步对特定内存地址的读取和写入在一个典型的指令执行周期当中,首先会从内存中去读取指令。接着这个指令被解码,以及可能需要从内存中读取操作数,在指令...原创 2018-05-09 13:06:06 · 4854 阅读 · 0 评论 -
同步异步、进程和线程
一、同步和异步其实同步异步的概念很简单,同步就是我们之前写程序的时候都是从上到下执行的,从左到右执行的。1个人执行多个任务,也是依次去执行的,1个人同一时间就执行一个任务异步:就是多个人同时的去执行任务。二、线程和进程进程进程就是系统中正在运行的一个应用程序,每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存空间。就比如说你有一个QQ音乐的进程,一个QQ浏览器的进程QQ音乐这个进程不能访...原创 2017-08-08 22:00:06 · 393 阅读 · 0 评论 -
操作系统双重模式和中断机制和定时器概念
一、陷阱中断还是想记录下这方面的知识吧,所以想来也写写。现代的操作系统其实都是由中断驱动的,中断其实本质上就是一种电信号,当有某些事件发生之后就会去产生中断,然后中断控制器进行接收,它可以接收多个外部中断源的中断请求,并进行优先级判断,选中当前优先级最高的中断请求,并将此请求送到CPU的INTR端。当CPU响应中断并进入中断服务程序的处理过程后,中断控制器仍负责对外部中断请求的管理。在我们的计算机...原创 2018-04-14 10:13:38 · 2947 阅读 · 0 评论 -
信号量和GCD中的dispatch_semaphore
一、信号量简单介绍最近学习了下操作系统中的信号量的概念,忽然发现和GCD中的信号量的概念几乎一样,估计GCD的dispatch_semaphore也是根据此封装的,在这里就简单的介绍下它的概念。 信号量是由荷兰科学家E.W.Dijkstra在1965年提出的要求信号量是一个整数,除了初始化之外,它就只能去通过wait和signal去访问,这其实和我们在ios中的dispatch_sem...原创 2018-04-18 15:49:57 · 291 阅读 · 0 评论 -
进程间通信
一、简单介绍操作系统内并发执行的进程可以是独立的进程也可以是协作的进程。如果一个进程不能影响其他进程或者被其他进程所影响,那么这个进程就是独立的。很明显,不与任何其他进程共享数据的进程就是独立的。如果说系统中一个进程能影响其他进程或者被其他进程所影响,那么该进程就是协作的,与其他进程共享数据的进程称为协作进程。协作进程需要一种进程间的通信机制(interprocess communic...原创 2018-04-15 10:02:58 · 346 阅读 · 0 评论 -
虚拟机简介
一、虚拟机概念虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,虚拟机的基本思想是单个计算机(CPU、内存、磁盘、网卡等)的硬件抽象为几个不同的执行部件,所以会给人一种感觉每个独立的执行环境都在自己的计算机上面运行一样。其实目前的一些虚拟机软件就是将物理硬件抽象为独立的然后给虚拟机运行。每个虚拟机都有其自己的虚拟CPU、内存、...原创 2018-04-14 11:49:52 · 3966 阅读 · 0 评论 -
操作系统死锁概念
在多道程序环境下,多道程序就是是在计算机内存中同时存放几道相互独立的程序,使它们在管理程序控制之下,相互穿插的运行,多个进程可能会竞争一定数量的资源,某个进程去申请资源去完成任务,如果这个时候资源不可用的话,那么该进程就会进入等待的状态,如果所申请的资源被其他等待的进程所占有了,那么该等待进程有可能再也无法改变其的状态资源的定义 资源类型有内存空间、CPU周期、文件、I/O设备...原创 2018-05-11 16:57:33 · 329 阅读 · 0 评论 -
Mac OS X下权限的SGID和SUID和sticy位
不得不说Mac OS系统真的是Linux有很多相似的地方,Linux中的SGID和SUID和sticy位,在Mac OS下也是有的,下面就简单的介绍下这三个位SUID首先看下SUID,查看su命令的执行权限,su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码,运行SUID位设置的命令或脚本时,其有效UID将变为文件所有者的UID,而不是正在运行它的...原创 2018-05-12 00:52:17 · 1161 阅读 · 0 评论 -
BIOS和DOS所提供的中断例程
通常在系统板的ROM中存放着一套程序,称为BIOS(基本输入输出系统),BIOS中主要是包含了以下几部分内容1、硬件系统的检测和初始化程序2、外部中断和内部中断的中断例程3、用于对硬件设备进行I/O操作的中断例程4、其他和硬件相关的中断例程 操作系统DOS提供了中断例程,其实从操作系统的角度来看,DOS的中断例程就是操作系统向程序员提供的编程资源BIOS和DOS在所提供...原创 2018-05-18 19:31:40 · 1463 阅读 · 0 评论 -
操作系统目录结构
系统可以有多个文件系统,且文件系统可以有不同的类型,就比如说一个典型的Solaris系统当中就可以有多个UFS文件系统、一个VFS系统和一些NFS系统关于UFS文件系统概念:UFS是UNIX文件系统的简称,它来源于4.3Tahoe发行版中提供的BSD Fat Fast File System(FFS)系统,属于FFS的演化版本。UFS几乎是大部分UNIX类操作系统默认的基于磁盘的文件...原创 2018-06-05 18:58:29 · 2692 阅读 · 0 评论 -
自底向上的语法分析
自底向上分析中,分析过程的每一步都是从当前句型中选择一个可归约的子串,将它归约到某个非终结符号实现自底向上分析最常用的技术就是移进-规约分析,边移入边分析,一旦栈顶符号串形成某个句型的句柄或其他可归约串的时候就进行归约,归约的结果就是将句柄或其他可归约串从栈顶部分给弹出,然后将相应的非终结符压入栈中,重复这一个过程直到归约到栈中只剩文法的开始符号时则为分析成功,也就确定了输入串是文法的...原创 2018-06-11 18:31:20 · 5453 阅读 · 3 评论 -
内存分配和外部碎片和内部碎片
内存分配其实最为简单的内存分配的方法就是将内存分为多个固定大小的分区,每个分区只能容纳一个进程,所以多道程序的程序数就会受到分区的限制,对于这种方法就是在一个分区空闲的时候就可以从输入队列当中选择一个进程,以便调入到空闲分区,当进程终止时,其分区可以被其他进程所使用,这种方法最开始是被IBM OS/360操作系统使用,当然现在不再使用,因为其的规模庞大,运行缓慢,没有什么人使用在可变分区方...原创 2018-05-16 15:51:54 · 3232 阅读 · 0 评论 -
进程交换和连续内存分配
进程交换进程需要是需要在内存当中才方便去执行,当然进程也可以暂时的从内存当中交换到备份存储中,这个备份存储通常是磁盘,因为它必须足够的大,以便可以容纳所有用户的内存镜像副本假如有一个CPU调度的算法,将另一进程换入到刚刚释放的内存空间当中,同时CPU调度器可以将时间片分配给其他已在内存中的进程,当每个进程用完时间片,它将与另一进程进行交换这样的交换策略的变种其实可以被用在基于优先级...原创 2018-05-16 15:12:10 · 1170 阅读 · 0 评论 -
编写0号中断处理程序,使得在除法溢出发生时,在屏幕中间显示字符串
编写0号中断处理程序,使得在除法溢出发生时,在屏幕中间显示字符串程序如下所示assume cs:codecode segmentstart: mov ax,cs ;把当前的cs寄存器的内容给ax mov ds,ax ;ds段中的内容其实就是cs 源地址 mov si,offset do0 ;设置si的偏移因为我们需要拷贝程序到内存...原创 2018-05-15 13:29:11 · 2627 阅读 · 1 评论 -
CPU的单步中断
CPU在执行完一条指令之后,如果检测到标志寄存器的TF位为1,则产生单步中断,引发中断过程。也就是说如果CPU检测到TF位为1,CPU就会去转去执行1号中断处理程序 其实在我们执行Debug的t命令的时候,就用到了CPU的单步中断,Debug当中提供了单步中断的中断处理程序,在使用t命令之后,Debug会将标志寄存器的TF位设置为1,然后使得CPU工作于单步中断的方式下,也就是说CPU在执...原创 2018-05-15 13:13:46 · 1980 阅读 · 0 评论 -
CPU的内部的中断
任何一个通用的CPU,比如说8086,都会具备一种能力,可以在执行完当前正在执行的指令之后,检测到从CPU外部发送过来的或者内部产生的一种特殊的信息,并且可以立即对所接受到的信息进行处理,这样的信息,我们就称为中断信息,在这里我们主要去讲解CPU内部产生的中断信息1、除法错误:比如说执行div指令产生的除法溢出2、单步执行3、执行into指令(本指令检测OF标志位,当OF=1时,说明已发...原创 2018-05-15 12:44:33 · 3000 阅读 · 0 评论