Linux运维之操做系统学习笔记程序员
Posted on 25 十二月, 2013 Leave a Commentshell
学习蓝本 《现代操做系统》 荷Andrew S.Tanenbaum著 陈向群 马洪兵等译数据库
现代计算机系统由一个或多个处理器、主存、磁盘、打印机、键盘、鼠标、显示器、网络接口和其余输入/输出设备组成。编程
关于对抽象的理解,抽象是管理复杂性的一个关键;windows
好的抽象能够把一个几乎不可能管理的任务划分为两个或者更多可管理的部分,第一部分是有关抽象的定义和实现,第二部分是随时能够用这些抽象解决问题;缓存
操做系统的任务是建立好的抽象,并实现和管理它所建立的抽象对象。网络
操做系统是运行在内核态的软件,操做系统的主要任务是隐藏硬件,呈现给程序以及程序员良好、清晰、优雅、一致的抽象,操做系统将丑陋变为美丽。多线程
操做系统的实际客户是应用程序,应用程序直接与操做系统及其抽象打交道;相反,最终用户与用户接口所提供的抽象打交道,或者是命令行shell或者是图形接口。运维
把操做系统看作是向应用程序提供基本抽象的概念,是一种自顶而下的观点。dom
按照另外一种自底向上的观点,操做系统则用来管理一个复杂系统的各个部分。现代计算机包含:处理器、存储器、时钟、磁盘、鼠标、网络接口、打印机以及许多其余设备。从这个角度看,操做系统的主要任务是在相互竞争的程序之间有序地控制对处理器、存储器、以及其余I/O设备接口分配的状况。
特别是在多用户多任务的操做系统上,这种自底向上的观点,变得尤其重要;由于当一个操做系统上有多个用户时,用户之间不只须要共享硬件、还要共享信息(文件、数据库等),操做系统的主要任务是记录哪一个程序在使用什么资源,对资源请求进行分配,评估使用代价,而且为不一样的程序和用户调解相互冲突的资源请求。
资源管理使用两种方式来实现多路复用(共享),在时间和空间上复用。
当一种资源在时间上复用时,不一样的程序或用户轮流使用它,显示第一个得到资源的使用,而后是下一个,以此类推
时间复用,打印机共享的例子
至于资源是如何实现时间复用的,则是操做系统的任务。
另外一类是空间复用。每一个客户获得资源的一部分,取得客户排队;如一般须要在各个应用程序之间分割内存,如此每个程序均可以同时入驻内存(如,为了轮流使用CPU),假设有足够的内存能够存放多个程序,那么在内存中同时存放若干个程序的效率,比把全部内存都分配给一个程序的效率要高得多,特别是,若是一个程序只须要整个内存的一小部分时,结果更是如此。
有关空间复用的其余资源还有磁盘,在许多系统中,一个磁盘同时为许多用户保护文件。分配磁盘空间并记录谁正在使用哪一个磁盘块,是操做系统资源管理的典型任务。
操做系统的历史:暂且略
计算机硬件介绍:
从概念模型上来说,一个简单的我的计算机能够抽象为上图中的模型:CPU、内存以及I/O设备都由一条系统总线链接起来并经过总线与其余设备通讯。
处理器:
是计算机的大脑,从内存中取指令并执行之。在cpu基本周期中,首先从内存中取出指令,解码并肯定其类型和操做数,接着执行之,而后取指令、解码并执行下一条指令。如此循环往复。
每一个cpu都有其一套可执行的专门指令集。Pentium不能执行sparc程序,而sparc也不能执行pentium程序。
Pipeline流水线机制
超标量CPU, 有多个执行单元,例如,一个cpu用于整数算数运算,一个cpu用于浮点算术运算,而另外一个用于布尔运算;两个或更多的指令被同时取出、解码并装入一个保持缓存区中,直至他们执行完毕。只要有一个执行单元空闲,就检查缓冲区中是否有可处理的指令,若是有,就把指令从缓冲区移出并执行之。此设计的隐含之处在于:程序的指令常常不被顺序执行。在多数状况下,硬件负责保证这种运算的结果与顺序执行指令时的结果相同,可是,仍然有部分使人烦恼的复杂情形而被强加给操做系统处理。
除了在嵌入式系统中的很是简单的cpu以外,多数cpu都有两种模式,也就是前面所说的用户态和内核态。
PSW二进制位控制这两种模式
当在内核态运行时,cpu能够执行指令集中的每一条指令,而且使用硬件的每种功能。操做系统在内核态下运行,从而能够访问整个硬件。
相反,用户在用户态下运行,仅仅容许执行整个指令集中的一个子集和访问全部功能的一个子集。通常而言,在用户态中有关I/O和内存 保护的全部的指令都是禁止的。
为了从操做系统得到服务,用户必须使用系统调用(system call)TRAP指令把用户态切换成内核态,并启用操做系统。
多线程和多核芯片
Moore定律指出:芯片中晶体管的数量每18个月翻一番。
Moore定律已经保持了30年,还有望再保持至少10年。
Multithreading多线程
Hyperthreading超线程
存储器:
寄存器采用与CPU一样的材料制成,因此与CPU速度同样快,访问不延时。
下一层是高速缓存,多数由硬件控制。主存被分割成高速缓存行(cache line)其典型大小为64字节,地址从0到63对应告诉缓存行0,地址64到127对应对应高速缓存行1,以此类推。
最经常使用的高速缓存行放置在CPU内部或者很是接近CPU的高速缓存中。当某个应用程序须要读一个存储字时,高速缓存硬件检查所须要的高速缓存行是否在高速缓存中,若是是则被称之为高速缓存命中,缓存知足了请求,就不须要经过总线把访问请求送往主存。
高速缓存中一般须要两个时钟周期。高速缓存未命中就必须访问内存,这须要付出大量的时间代价。因为高速缓存的价格昂贵,因此其大小有限。有些机器具备两级设置三级高速缓存,每一级高速缓存比前一级慢且容量更大。
缓存在计算机科学的许多领域起着重要的做用,只要存在大量的资源能够划分为小的部分,那么,这些资源中的某些部分就会比其余部分更频繁地获得使用,一般缓存的使用会带来性能上的改善,操做系统一直在使用缓存。例如,多数操做系统在内存中保留频繁使用的文件(的一部分),以免从磁盘中重复地调取这些文件。
在任何缓存系统中,都有若干须要尽尽快考虑的问题,包括:
1)什么时候把一个新的内容放入缓存; 2)把新内容放在缓存的哪一行上; 3)在须要时,应该把哪一个内容从缓存中移走; 4)应该把新移走的缓存放在某个较大存储器的何处。
现代CPU L1缓存老是在cpu中;L2缓存,二者之间的差异在于时序,对L1缓存的访问,不存在任何延时,而对L2缓存的访问,则会延时1或2个时钟周期。
再往下就是主存 RAM,一般被称之为RAM(Random Access Memory)随机访问存储器。全部不能在高速缓存命中获得知足的访问请求都会被转送至主存。
除了主存以外,不少计算机都采用了非易失性访问存储器。他们与RAM不一样,断电后,存储在其内的数据不会丢失。只读存储器ROM(Read Only Memory,ROM)在工厂中就被编程完毕,而后不再能修改,其特色是速度快价格便宜,
在有些计算机中,用于启动计算机的引导加载模块存放在ROM中,还有一些I/O也采用ROM底层处理机制。
EEPROM(Electrically Eraseable PROM,电可擦除可编程ROM)和闪存(flash memory)也是非易失性的,可是与ROM相反,它们能够擦除和重写。
还有一类存储器是CMOS,易失性的。CMOS存储器和递增时间的时钟电路由一块小电池驱动。CMOS存储器还能够保存配置参数。
若电池失效时,会提示Alzheimer病症
硬盘:
下一个层次是磁盘(硬盘)
磁盘驱动器的构造
磁盘惟一的问题是随机访问数据时间大约慢了三个数量级。其低速的缘由是磁盘是一种机械装置。
在一个磁盘上有一个或多个金属盘片,它们以5400、7200、10800rpm的速度旋转。
边缘开始有一个机械手臂悬横在磁盘上面,信息写在磁盘上的一系列同心圆上。
在任意一个给定臂的位置,每一个磁头能够读取一段环形的区域,称为磁盘(track),把一个给定臂的位置上的全部磁盘合并起来,就组成了一个柱面(cylinder)
每一个磁道划分为多个扇区,典型值是512字节。
现代磁盘,较外面的柱面比较内部的柱面有更多的扇区。机械臂从一个柱面到相邻柱面大约须要1ms。而随机移动到一个柱面的典型时间为5ms到10ms,其具体时间取决于驱动器。
一旦磁臂到达正确的磁道上,驱动器必须等待所需的扇区旋转到磁头之下,就开始读写,低端磁盘的速率是5MB/s,而高端磁盘的速率是160MB/s,固态硬盘的速度更快。
计算机支持一种叫作虚拟内存的机制,存储器管理单元(MMU memory management unit,MMU)
方法是将程序放在磁盘上,而将主存做为一种缓存,用来保存使用最频繁的部分程序。此机制须要快速的映像内存地址,以便把程序生成的字节地址转换为有关字节在RAM中的物理地址,这种映像由cpu的一个部件,成为内存管理单元MMU。
缓存和MMU的出现对系统的性能有着重要的影响。
在多道程序设计中,从一个程序切换到另外一个程序,有时称为上下文切换(context text)
磁带:
在存储器体系中的最后一层是磁带,此介质一般用于磁盘的备份,并可保存大量的数据集。
I/O设备:
I/O设备通常包括两个部分,设备控制器和设备自己。
控制器是插在电路板上的一块芯片或一组芯片,这块电路板物理地控制设备。它从操做系统接受命令。
控制器的任务是为操做系统提供一个简单的接口。
I/O设备的另外一个部分是实际的自身。设备自己有个相对简单的接口,、。
每类设备的控制器不一样,因此须要不一样的软件进行控制,专门与控制器对话,发出命令并接受响应的软件,称之为设备驱动程序(devcie driver)。每一个控制器厂家必须为所支持的操做系统提供相应设备的驱动程序。
为了可以使用设备驱动程序,必须把设备驱动程序载入到操做系统中,这样它就能够在核心态中运行。
将设备驱动装入操做系统的三个途径:
1)内核与驱动程序从新连接,reboot 系统,多数UNIX以此种方式工做;
2)在操做系统文件中设置一个入口,并通知该文件须要一个设备驱动程序,windows以此方式工做;
3)操做系统在运行时接受新的设备驱动并装载之,将其安装好,无需重启操做系统,也就是所谓的支持热插拔了。
每一个设备控制器都有少许的用于通讯的寄存器。
版权声明:今天下午上班,打开博客一看什么个状况,看变成转载了,这篇文章最初是由本人发表在http://www.menger51.com/?p=143我本身的博客上的,只是那个博客很久没有更新,因此才贴到这个上面来的,不知道51cto是个什么状况?