必须知道的操作系统原理
必须知道的操作系统原理
操作系统(英语:operating system,缩写作 OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。操作系统的类型非常多样,不同机器安装的操作系统可从简单到复杂,可从移动电话的嵌入式系统到超级计算机的大型操作系统。许多操作系统制造者对它涵盖范畴的定义也不尽一致,例如有些操作系统集成了图形用户界面,而有些仅使用命令行界面,而将图形用户界面视为一种非必要的应用程序。下面是小编收集整理的必须知道的操作系统原理范文,欢迎借鉴参考。
必须知道的操作系统原理(一)
进程概念是现在操作系统的基本概念,已经成为计算机科学中的一大成就。
什么是进程?
进程的出现,是为了是操作系统可以以一种有序的方式管理应用的执行,以达到以下目的:
资源对多个应用程序是可用的;
物理处理器在多个应用程序之间切换以保证所有程序都在执行中;
处理器和I/O设备能得到充分利用;
所有现在操作系统采用的方法都是依据一个或者多个进程存在的应用程序执行的一种模型。 到底什么是进程呢?
进程是一组元素组成的实体,它可以是一个正在执行中的程序,也可以是一个能分配给处理器并由处理器执行的实体。
进程的两个基本元素是:程序代码(program code)和代码相关联的数据集(set of data)。
在进程执行时,任意给定一个时间,进程都可以唯一地表征为以下元素:
标识符:进程的唯一标识符,用来区别其他进程
状态:进程在不同的生命周期有着不同的状态
优先级:相对于其他进程的优先级
程序计数器:程序中即将被执行的下一条指令的地址
内存指针:包含程序代码和进程相关数据的指针,还有和其他进程共享内存块的指针
I/O状态信息:包括显示的I/O请求、分配给进程的I/O设备和被进程使用的文件列表等
记账信息:可能包括处理器时间总和、使用的时钟数总和、时间限制、记账号等
上述的列表信息被存放在一个称为进程控制块的数据结构中,该控制块由操作系统创建 和管理。
进程状态
在任何时刻,进程可以处于以下两种状态之一:运行态和未运行态,这是最简单的两状态模型。在这个模型中,会有一个调度器(dispatcher),使处理器从一个进程切换到另外一个进程。
由于存在着一些处于非运行状态但已经就绪等待执行的进程,而同时存在另外一些处于堵塞状态等待I/O操作结束的进程。
因此,解决这一问题比较自然的方法是使用五状态模型: 运行态、就绪态、堵塞/等待态、新建态和退出态。
>>(1)被挂起的进程
上述的基本状态提供了一种为进程建立系统模型的方法,并指导系统的实现。但是,往这个模型中添加其他状态也是合理的。
由于处理器的运行速度远大于I/O,以至于内存中所有的进程都在等待I/O的情况也是很常见的。因此,即使是多道程序设计,大多数处理器仍然可能处于空闲状态。
一种解决方案是增大内存,使得内存中可以存在更多的进程。然而这种方案显然是治标不治本的。
另外一种解决方案是交换(swapping)。当内存中没有处于就绪状态的进程时,操作系统就把被阻塞的进程换出到磁盘中的挂起队列(suspend queue)。操作系统在此之后取出挂起队列中的另一个进程,或者接受一个新进程,将其加载到内存中运行。这时,在进程状态模型中添加了另外一个状态:挂起态。
当操作系统从挂起队列中取出一个依然阻塞的进程是毫无意义的,因为它仍然没有准备好执行。所以为了区分被挂起的进程哪些是可以取出的,需要设计另外一种挂起模型:为了区分,需要四个状态:
就绪态:进程在内存中并可以执行
阻塞态:进程在进程中并等待一个事件
阻塞/挂起态:进程在外存中并等待一个事件
就绪/挂起态:进程在外存中,但是只要被载入内存就可以执行
总结一下挂起的进程的概念:
1.进程不能被立即执行。
2.进程可能是或不是正在等待一个事件。如果是,阻塞条件不依赖于挂起条件,阻塞事件的 的发生不会使进程立即执行。
4.为组织进程的执行,可以通过代理把这个进程置于挂起状态,代理可以是进程自己,也 可以是父进程或者操作系统。
5. 除非代理显示的命令操作系统进行状态转换,否则进程无法从这个状态中转移。
6. 除了因为提供更多的内存空间,进程还会因为什么原因被挂起呢?
必须知道的操作系统原理(二)
1、进程与线程的区别
(1)粒度性分析:线程的粒度小于进程。
(2)调度性分析:进程是资源拥有的基本单位,线程是独立调度与独立运行的基本单位,出了寄存器,程序计数器等必要的资源外基本不拥有其他资源。
(3)系统开销分析:由于线程基本不拥有系统资源,所以在进行切换时,线程切换的开销远远小于进程。
2、进程的状态及其转换
3、进程同步与互斥的区别
互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。
简单地说:同步体现的是一种协作性,互斥体现的是一种排他性。
4、进程间的通信方式有哪些?
(1) 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
(2)有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
(3)信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
(4) 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
(5)信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
(6)共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
(7)套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
5、作业(或进程)的调度算法有哪些?
(1)先来先服务(FCFS,First-Come-First-Served): 此算法的原则是按照作业到达后备作业队列(或进程进入就绪队列)的先后次序来选择作业(或进程)。
(2)短作业优先(SJF,Shortest Process Next):这种调度算法主要用于作业调度,它从作业后备队列中挑选所需运行时间(估计值)最短的作业进入主存运行。
(3)时间片轮转调度算法(RR,Round-Robin):当某个进程执行的时间片用完时,调度程序便停止该进程的执行,并将它送就绪队列的末尾,等待分配下一时间片再执行。然后把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程,在一给定的时间内,均能获得一时间片处理机执行时间。
(4)高响应比优先(HRRN,Highest Response Ratio Next): 按照高响应比((已等待时间+要求运行时间)/ 要求运行时间)优先的原则,在每次选择作业投入运行时,先计算此时后备作业队列中每个作业的响应比RP然后选择其值最大的作业投入运行。
(5) 优先权(Priority)调度算法: 按照进程的优先权大小来调度,使高优先权进程得到优先处理的调度策略称为优先权调度算法。注意:优先数越多,优先权越小。
(6)多级队列调度算法:多队列调度是根据作业的性质和类型的不同,将就绪队列再分为若干个子队列,所有的作业(或进程)按其性质排入相应的队列中,而不同的就绪队列采用不同的调度算法。
6、死锁产生的原因,死锁产生的必要条件是什么,如何预防死锁,如何避免死锁,死锁定理?
死锁产生的原因:(1)竞争资源;(2)进程推进顺序不当。
死锁产生的必要条件:
(1)互斥条件:一个资源一次只能被一个进程所使用,即是排它性使用。
(2)不剥夺条件:一个资源仅能被占有它的进程所释放,而不能被别的进程强占。
(3)请求与保持条件:进程已经保持了至少一个资源,但又提出了新的资源要求,而该资源又已被其它进程占有,此时请求进程阻塞,但又对已经获得的其它资源保持不放。
(4)环路等待条件:当每类资源只有一个时,在发生死锁时,必然存在一个进程-资源的环形链。
预防死锁:破坏四个必要条件之一。
死锁的避免:银行家算法,该方法允许进程动态地申请资源,系统在进行资源分配之前,先计算资源分配的安全性。若此次分配不会导致系统从安全状态向不安全状态转换,便可将资源分配给进程;否则不分配资源,进程必须阻塞等待。从而避免发生死锁。
死锁定理:S为死锁状态的充分条件是:尚且仅当S状态的资源分配图是不可完全简化的,该充分条件称为死锁定理。
死锁的解除:
(1)方法1:强制性地从系统中撤消一个或多个死锁的进程以断开循环等待链,并收回分配给终止进程的全部资源供剩下的进程使用。
(2)方法2:使用一个有效的挂起和解除机构来挂起一些死锁的进程,其实质是从被挂起的进程那里抢占资源以解除死锁。
7、分段式存储管理、分页式存储管理,两个的区别?
分段式存储管理:分页存储管理是将一个进程的地址(逻辑地址空间)空间划分成若干个大小相等的区域,称为页,相应地,将内存空间划分成与页相同大小(为了保证页内偏移一致)的若干个物理块,称为块或页框(页架)。在为进程分配内存时,将进程中的若干页分别装入多个不相邻接的块中。
分页式存储管理:在分段存储管理方式中,作业的地址空间被划分为若干个段,每个段是一组完整的逻辑信息,如有主程序段、子程序段、数据段及堆栈段等,每个段都有自己的名字,都是从零开始编址的一段连续的地址空间,各段长度是不等的。
两者的区别:
1、页是信息的物理单位,分页是为了实现非连续的分配,以便解决内存的碎片问题,或者说分页是为了由于系统管理的需要。
2、页的大小固定是由系统确定的,将逻辑地址划分为页号和页内地址是由机器硬件实现的。而段的长度是不固定的,决定与用户的程序长度,通常由编译程序进行编译时根据信息的性质来划分。
3、分页式存储管理的作业地址空间是一维的,分段式的存储管理的作业管理地址空间是二维的。
8、页面置换算法有哪些?
(1)最佳置换算法(Optimal):即选择那些永不使用的,或者是在最长时间内不再被访问的页面置换出去。(它是一种理想化的算法,性能最好,但在实际上难于实现)。
(2)先进先出置换算法FIFO:该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
(3)最近最久未使用置换算法LRU(Least Recently Used):该算法是选择最近最久未使用的页面予以淘汰,系统在每个页面设置一个访问字段,用以记录这个页面自上次被访问以来所经历的时间T,当要淘汰一个页面时,选择T最大的页面。
(4)Clock置换算法:也叫最近未用算法NRU(Not RecentlyUsed)。该算法为每个页面设置一位访问位,将内存中的所有页面都通过链接指针链成一个循环队列。当某页被访问时,其访问位置“1”。在选择一页淘汰时,就检查其访问位,如果是“0”,就选择该页换出;若为“1”,则重新置为“0”,暂不换出该页,在循环队列中检查下一个页面,直到访问位为“0”的页面为止。由于该算法只有一位访问位,只能用它表示该页是否已经使用过,而置换时是将未使用过的页面换出去,所以把该算法称为最近未用算法。
(5)最少使用置换算法LFU:该算法选择最近时期使用最少的页面作为淘汰页。
必须知道的操作系统原理(三)
在工作中经常会遇到这样的情况:想要安装Linux但是计算机不带光驱或软驱,或者是笔记本配置的非标准的软驱和光驱,如1394接口,USB接口等,在Linux安装时所引导的Linux内核一般都不会带这些接口的驱动,所以也无法通过本地安装Linux,此外,在一些场合,如机房,IT实验室,工厂生产线,有大量的计算机需要同时安装Linux,如果通过光驱的方式一个个安装,不仅效率低,也不利于维护。这是时候你就需要PXE的强大功能了。本文将就PXE的基本原理和工作方式进行简要介绍。具体的实践过程需要比较丰富的网络知识。
1.操作系统安装的流程
通用流程:首先,bios启动,选择操作系统的启动(安装)模式(此时,内存是空白的),然后根据相关的安装模式,寻找操作系统的引导程序(不同的模式,对应不同的引导程序当然也对应着不同的引导程序存在的位置),引导程序加载文件系统初始化(initrd)程序和内核初始镜像(vmlinuz),完成操作系统安装前的初始化;接着,操作系统开始安装相关的系统和应用程序。
硬盘安装的流程:bios启动——MBR寻找grub——grub程序读取menu.list等配置文件,找到内核启动镜像和相关初始化程序,安装(或者启动)。
PXE(Pre-boot Execution Environment)是由Intel设计,可以使计算机通过网络启动的协议。协议分为client和server两端,PXE client在网卡的ROM中,当计算机启动时,BIOS把PXE client调入内存执行,并显示出命令菜单,经用户选择后,PXE client将放置在远端的操作系统通过网络下载到本地运行。
pxe网络安装的流程:bios启动——pxe client中的程序进入内存,显示命令菜单——此程序开始寻找网络引导程序(bootstrap文件,这个文件的名字随着发行版的不同而不同,在centos中,它是pxelinux.0)——引导程序读取配置文件pxelinux.cfg,获得系统初始化的相关文件信息——系统启动,开始进行安装。
2.pxe模式安装操作系统的原理
2.1安装流程
客户机从自己的PXE网卡启动,向本网络中的DHCP服务器索取IP,并搜寻引导文件的位置
DHCP服务器返回分给客户机IP以及bootstrap文件的放置位置(该文件一般是放在一台TFTP服务器上)
客户机向本网络中的TFTP服务器索取bootstrap文件
客户机取得bootstrap文件后之执行该文件
根据bootstrap的执行结果,通过TFTP服务器加载内核和文件系统
进入安装画面, 此时可以通过选择FTP,HTTP,NFS方式之一进行安装
2.2流程小结
总结就是:
1)网卡的client 网卡rom 寻找dhcp服务器,由/etc/dhcp.conf得到ip和引导程序所在地点
2)有dhcp.conf(引导程序文件名)和tftp的配置(tftp跟路径,里面有引导程序和系统初始化程序),得到引导程序pxelinux启动文件的绝对路径,运行引导程序,读取启动配置文件pxelinux.cfg/default,得到操作系统初始化的两个相关文件
3)选择安装方式
客户端广播dhcp请求——服务器相应请求,建立链接——由dhcp和tftp配置得到ip还有引导程序所在地点——客户端下载引导程序并开始运行——引导程序读取
2.3.相关文件位置与内容:
dhcp配置文件/etc/dhcpd/dhcp.conf——ip管理与引导程序名称
tftp配置文件/etc/xinetd.d/tftp——tftp根目录,和上面的引导程序名称组成完整路径
引导程序读取的配置文件/tftpboot/pxelinux.cfg/default——启动内核其他
3.实战过程
实战环境;centos 6.3,kernel 2.6.32
3.1安装前的准备:
软硬件配置:网卡要支持pxe启动,操作系统也要支持pxe启动,另外有ftp服务器用于存储操作系统的安装文件,dhcp服务器用于分配ip
3.2服务器配置
1)配置dhcp服务器
由于PXE客户机通常是尚未装系统的裸机,因此为了如服务器取得联系并正确下载相关引导文件,需要预先配置好DHCP服务来自动分配地址并告知引导文件的位置。
注明:filename这一个选项很重要,它的作用是指明bootstrap所在的位置,一般是指向一个TFTP服务器的某个目录下。这里是相对路径,其中路径的上半部分在的一个配置文件之中。
2)配置tftp服务器
TFTP服务的配置文件是/etc/xinetd.d/tftp,RedHat9 默认安装已经生成了该文件
注明:这个文件基本上不用改动,但是需要注意的的是server_args= -s /tftpboot这一行,它的含义是将/tftpboot作为root目录,这样在dhcpd.conf中的filename一行就应该写bootstrap的相对路径: filename “pxelinux.0”,这是出于安全方面考虑的.如果你去掉了-s这个参数,那幺就要在filename一行指出bootstrap的绝对路径: filename “/tftpboot/pxelinux.0”.注意,这里-s的内容会因为发行版的内容不同而不同,一般不用改动。
3.3添加引导程序
Bootstrap对于支持网络安装的操作系统,Bootstrap基本上都可以从安装源文件上找到,对于本例来说,centos的bootstrap就是cdrom:/isolinux/pxelinux.0我们把它们都拷贝到tftpboot下.
3.4编辑引导配置文件
把centos第一张安装光盘上images/pxeboot目录下的initr.img和vmlinux也考到tftpboot/目录下。在/tftpboot创建pxelinux.cfg目录,用于放isolinux的配制文件。光盘isolinux/下有一个isolinux.cfg文件,把它拷贝到/tftpboot/pxelinux.cfg/目录下并改名为default.下面为修改后的default文件:
default linux
prompt 1
timeout 30
label linux
kernel vmlinuz
append initrd=initrd.img
这个Default 文件很容易看懂,就是告诉启动后使用那个内核引导
3.5开始安装
1)确保:服务器端刚才配置的几个服务都处于开启状态;关闭防火墙;bios中选择从网络启动
2)剩下的步骤和从硬盘安装相同