内功修炼之操作系统学习(一操作系统概述)。

长平狐 发布于 2012/10/08 15:16
阅读 108
收藏 0

 

                        一:操作系统概述。

    操作系统:管理系统资源、控制程序运行、改善人机界面、提供各种服务,并合理组织计算机工作流程和为用户方便而有效的使用计算机提供良好的运行环境的最基本的系统软件 。

    传统的操作系统中是指运行在核心态、受硬件保护的软件,shellwindow模块不属于操作系统的一部分。随着客户--服务器结构操作系统的出现,传统上被认为是操作系统核心的组建,如文件系统、主存管理、设备管理,都被移至用户空间运行。它们应该看做操作系统的一部分。

    每个应用程序都运行在自己的虚拟机上,这被称为进程。进程是贯穿于操作系统设计、实现和使用的最重要的概念。

    多道程序设计是指系统中有多个进程运行。多个进程共享物理资源,这被称为资源复用。分为:空分复用共享和时分复用共享。空分复用表明资源可以被进一步分割,将资源的不同单位同时分配给不同的进程。如主存和辅存。时分复用:表明资源不能被分割。但是每个进程会获得一段时间的使用权。它又可分为时分独占和时分共享。

时分独占资源只有在进程完之后才会释放。使用过程中不能被抢占。如磁带机。时分共享资源在被某进程使用过程中可能随时会被抢占。如处理器资源和磁盘资源。不同进程可以发出io请求,操作系统并不要求几个io请求之间不能插入其他io请求。

    资源虚化是一类有效的资源管理技术。它把一个物理资源转变成逻辑上的对应产物。它可以解决物理资源不足的问题,同时可以提供高效的虚拟资源并创建更好的运行环境。使用虚化技术的最佳例子是基于物理内存的虚拟主存。当某个进程运行空间超出物理贮存空间大小,操作系统便在主存和磁盘之间自动的进行数据交换。虚拟打印机、虚拟文件系统都是资源虚化的例子。

    资源复用和资源虚化都是为了解决物理资源不足的问题。而资源抽象则是实现资源的易用性。操作系统对物理资源进行抽象,任何特定的硬件资源都有一个接口和一组操作。这些抽象接口比直接使用硬件接口简单的多。它屏蔽硬件了资源的物理特性和接口细节。例如,面向进程而不是处理器,面向文件而不是磁盘。面向窗口而不是屏幕。面向虚拟机而不是物理计算机。资源抽象软件对内封装实现细节,对外提供应用接口。这些软件通常指设备驱动程序,通过它们间接地对硬件进行控制。

    进程是对于进入主存的当前运行的程序在处理器上操作的状态集的抽象。是资源分配和保护的基本单位。是并发和并行操作的基础。若干进程时分复用共享处理器资源,制造某个运行进程独自拥有一个处理器的假象。同时物理主存被抽象成虚拟主存,给每个进程造成另一个假象:它正在独占整个主存。虚拟主存是通过结合对主存和磁盘的管理来实现的,每一个进程的虚拟主存(虚拟地址空间)的内容存储在磁盘上,然后以主存作为磁盘的高速缓存,以实现比物理主存大得多的虚拟主存空间。

    文件是对磁盘等设备的抽象。操作系统为了管理方便,除了处理器和主存之外,将磁盘和其他外部设备资源都抽象为文件,如软盘文件,磁带文件、光盘文件、打印机文件等等。这些设备均在文件的概念下统一管理,使app对数据和设备的操作有一致的接口。

    操作系统两项最基本的任务:1:防止硬件资源被失控的app滥用。2:屏蔽硬件操作细节。

    文件是对设备的抽象。虚存是对主存和设备的抽象。进程则是对处理器、主存和设备的抽象。

    操作系统就是一台虚拟的计算机。虚拟机是由操作系统通过共享硬件资源的方式来实现的,它定义进程运行的逻辑计算环境。一个进程运行在一台虚拟机上,就可以认为进程就是一台虚拟机。

     中断:强制cpu上当前执行的程序暂停的硬件信号。它是现代计算机的核心技术,目标是实现多个进程共用cpu

    并发进程执行过程中,会产生两种基本关系:竞争和协作。操作系统协调进程运行,解决并发进程间通信、通信和死锁的问题。

能分配用户使用的各种软硬件设施成为资源。分为硬件资源和软件资源。硬件资源有处理器、存储器和外部设备等。软件资源分为程序和数据等。

多道程序设计是指允许多个作业(程序)同时进入计算机系统的主存并启动交替计算的方法。

并发性是指两个或两个以上的活动或事件在同一时间间隔内发生。操作系统是一个并发系统,有多道程序同时运行,这些程序成为并发程序,这样的系统就是并发系统。多道程序设计的引入导致程序可以并发执行。操作系统调度并发程序执行,使得计算机的多个硬件同时工作,如cpu和磁盘是两个不同的部件,可以让一个程序在cpu上执行,另一个向磁盘中写数据。发挥并发性能够消除计算机系统中硬部件之间的相互等待,有效的提高系统效率。、

采用并发技术的系统成为多任务处理系统。在单cpu上多个程序并发是宏观概念,从微观上看,它们是顺序执行的。在多cpu系统上,并发性不仅体现在宏观上还体现在微观上。这成为并行。并行指两个或两个以上的活动或时间在同一时刻发生。

共享性和并发性是操作系统两个基本特征。它们相互依存。一方面,资源共享是由程序并发执行而引起的,不存在并发执行也就无所谓共享。另一方面,资源共享是支持并发行的基础。

在多道程序环境中,允许多个程序并发执行,这会导致随机事件发生。由于资源有限而程序众多,每个程序的执行并非连贯的,而是走走停停。系统中程序何时执行、何时暂停、以何种速度推进、每个程序执行多长时间结束,这都是不可预知的。也就是说程序是以异步方式运行的。在多进程并发的环境中,任何一个进程都有可能在任一时刻被暂停。

操作系统的主要功能是为应用程序运行创建良好地环境。为此,内核提供了一系列具备预定功能的内核函数,通过一组称为系统调用的接口呈现给用户。系统调用把应用程序的请求传送至内核,调用相应的内核函数完成所需的处理,将处理结果返回给应用程序。内核的主体是系统调用的集合,可以将内核看成特殊的公共子程序 。

程序的运行空间分为内核空间和用户空间,每个程序按照个自己的特权运行,在逻辑上隔离,应用程序不能直接访问内核数据,也无法直接调用内核函数。它们只能在用户空间操作用户数据,调用用户空间函数,如果需要获得系统服务,就必须利用系统提供给用户的特殊的接口---系统调用。

系统调用有两个作用:一,内核可以给予权限和规则对资源的访问进行控制,保证系统的安全性。二,系统调用对资源进行抽象,提供一致的接口,避免使用资源时发生错误。

cpu执行程序中预设的有访管指令实现的系统调用时,会产生内核信号,通过中断机制,处理器的状态由用户态转变为核心态,进入操作系统并执行相应的内核函数。系统调用时应用程序获得操作系统服务的唯一途径。

API是一个函数定义,说明如何获得给定的服务。一个API的实现可能会用到一个或多个系统调用。也可能不适用系统调用。

Windows的系统调用没有公开,仅提供以库函数形式定义的API.

linux既支持库函数,又公开了系统调用。

    从应用程序的角度来看,库函数与系统调用之间的差别并不重要。但它们在实现上有很大差别。使用库函数可以隐藏访管指令的细节,使得系统调用更像函数调用,对用户隐藏系统调用,这样即使内核改动也不影响应用程序的正确性。库函数属于应用程序在用户态运行,系统调用属于系统程序,在核心态运行。

     操作系统实现系统调用的机制成为陷阱或异常处理机制。由于系统调用而引起的处理器中断的机器指令成为访管指令、自陷指令或中断指令。其中访管指令为非特权指令,在用户态执行。在目态下执行时 会将cpu转换到核心态。每个系统调用都事先规定编号,成为功能号,发出访管、自陷或中断指令时,必须通过某种方式指明对应系统调用的功能号,大多数情况下,还附带传递给内核函数的参数。

    访管指令为中断的一种,由应用程序自己发出。在目态下执行,当源程序中有需要操作系统服务的要求时,编译程序就会在由源程序转换成的目标程序中安排一条“访管指令”并设置一些参数(系统调用功能号和参数)。当目标程序执行时,处理器若取到了“访管指令”就产生一个中断事件,中断装置就会把处理器转换成管态,并让操作系统处理该中断事件。操作系统分析访管指令中的参数,然后让相应的“系统调用”子程序为用户服务。系统调用功能完成后,操作系统把中央处理器的管态改为目态,并返回到用户程序。

    系统调用的实现要点:一,编写系统调用服务函数;二,设计系统调用的入口地址表,每个入口地址都指向一个系统调用的内核函数。三,陷阱处理机制,需要开辟现场保护区,以保存发生系统调用时的处理器现场。

     内核是一组程序模块,作为可信软件来提供支持进程并发执行的基本功能和基本操作,通常驻留在内核空间,运行于核心态,具有访问硬件设备和所有主存空间的权限,是仅有的能够执行特权指令的程序。除内核外,其他部分都运行在用户态。

Unix系统为单内核结构,此种内核为一个大二进制映像,模块之间的交互通过直接调用其他模块中的函数来实现。Linuxunix一样也是单内核结构,但是它引入了加载模块和卸载模块机制,可以动态改的装入和删除一个文件系统或设备驱动程序。

Linuxwindow执行效率高5--6倍,因为linux为整体式结构,它按照功能把整个系统分成各个模块,模块间可不加控制的调用,缺点是模块独立性差,牵连甚多,形成复杂的调用关系。造成系统结构不清晰,正确性难以保证。优点是:结构紧密,组合方便,执行效率高。

微内核:操作系统仅将所有的应用必需的核心功能放入内核,称为微内核,其他功能都在微内核之外,由在用户态运行的服务进程实现。通过微内核提供的消息传递机制完成进程间的通信。

操作系统分为两部分,一是运行在核心态的内核,它提供系统的基本功能,如进程管理及调度。二是运行在用户态并以客户--服务器方式运行的进程层。每个进程完成一组服务,称为服务器进程。如提供文件管理服务,进程管理服务,存储管理服务。用户进程也在这一层,但不是操作系统的构件。由于进程具有不同的地址空间,客户和服务器进程之间均采用消息传递机制进行通信,而内核被映射到所有进程的虚拟进程空间,它可以控制所有进程。应用程序进程发出消息,内核将消息传达送给相应的服务器进程,由服务器进程客户所提出的服务请求。

微内核结构的优点:一,对进程的请求提供一致接口,不必区分内核服务和用户级服务。而具有较好的可扩充性和易修改性,增加新服务或替换老功能只需增加或替换服务器。三,可移植性好,与特定cpu有关的代码均在微内核中。四,对分布式系统提供有力的支撑。当消息从客户机发送给服务器进程时,不必知道它驻留在哪台机器上。微内核结构的明显缺点是:运行效率低,因为进程间必须通过内核的通信机制才能通信。Windows就是微内核结构。

内核是由中断驱动的。只有发生中断或异常事件时,才由硬件psw引出操作系统内核工作。内核是不可抢占的。这意味着内核中运行的进程即便其时间片已经用完,也不能被其他进程抢占,除非它自愿放弃cpu

虽然内核不可被抢占,但是它是可被中断的。

进程是资源分配和保护的基本单位。拥有独立的地址空间和运行环境,进程间通信和切换开销相当大。线程是cpu调度和分配的基本单位。管程是管理共享资源的一种同步机制,对管程的调用表示对共享资源的请求与释放,管程可被多个进程或管程嵌套调用,但他们只能互斥的使用管程。管程的引入使得原来分散的在进程中的临界区可集中起来同一控制和管理,更方便的使用资源。

类程用于管理私有资源。对类程的调用表示对私有资源执行操作。

为了提高内核函数的并发性,在创建应用程序时,会为内核函数分配一个核心栈,用于运行os的内核函数。Os的地址空间位于共享地址空间中,被映射到每一个应用程序地址空间中。进程运行过程中产生异常或执行系统调用时,处理器由用户态切换到核心态,控制权被转移至操作系统。应用程序线程被保护,启用被中断进程的核心栈存储操作系统函数执行时的调用的数据。此时发生了模式切换,但没有发生进程上下文切换,还是认为程序在当前应用程序中执行。以上操作系统运行模型被称为在应用进程内执行的模型。

作为独立进程运行的模型是指操作系统函数作为独立进程执行的模型把操作系统组织成系统进程。操作系统的功能就是这些系统进程集合运行的结果。操作系统的小部分功能在核心态运行,但部分功能被组织在一部分独立进程内实现。这组进程在用户态执行,而进程切换函数的执行仍然在核心态。服务器进程在用户态工作,与与用户进程平等。

Windows Idle进程:进程ID0,每个cpu都有一个Idle进程,包含一个线程用于统计空闲cpu时间。


原文链接:http://blog.csdn.net/ithzhang/article/details/7686283
加载中
返回顶部
顶部