操作系统的基本概念

2 篇文章 0 订阅
1 篇文章 0 订阅

转载 :http://blog.csdn.net/lemon_fantasy/article/details/2604325

操作系统的基本概念

1. 操作系统的内核是由中断驱动的

由于操作系统内核的重要性,为防止用户程序错误调用内核模块而是系统崩溃,所以对操作系统的内核加以特殊保护。解决这个问题的一个方法就是,在实现方法上把内核模块的调用与应用程序的一般过程调用区别开来,并对一般用户不公开内核模块的调用方法,从而使应用程序不能直接调用内核模块。

因为高级语言不支持中断,所以达到上述目的的一个方法就是用中断的方法来实现内核模块的调用,从而使高级语言应用程序不可能直接接触到内核模块。

另外就是进程切换的实现问题。进程切换实质上也是处理器执行流程的转移,但这种转移不是由正在执行的进程决定的,所以也要用中断技术来实现。

因此,操作系统内核的运转是由中断来驱动的,中断是内核的生命之源

2. 系统时钟的实现

所有的操作系统都要按照一个固定的时间间隔周期性地对系统中有关时间的一些事件进行处理。例如,操作系统必须定时周期性地查看一边系统中所有进程的纪录,以便及时了解各个进程的工作状态。所以,在操作系统中要设置一个定时器(硬件的或者软件的),使并使它定时向处理器发出“定时时间到”的中断申请,并在中断服务程序中对系统中的时间事件进行处理。

定时器发生的中断请求就叫做操作系统的系统时钟,也叫做时钟节拍;对应的中断服务程序也叫做时钟节拍服务。

3. 进程和线程的基本概念

在操作系统中,进程是享用系统资源的对象,是资源分配的基本单位。

程序只是一段可执行代码,它需要的是存储空间而不是处理器时间,只有当程序运行时才会需要占用处理器时间。这也就是说,需要占用处理器的是程序的一次运行时间而不是程序本身。因此,在计算机中,程序的一次运行过程才应该是处理器资源分配的基本单位。为了方便,人们把程序的一次运行过程就叫做进程

在国内,一般把进程理解为:”可并发执行并具有独立功能的程序在一个数据集合上的运行过程,它是操作系统进行资源分配和保护的基本单位”。这句话首先强调了进程是一个程序的运行过程,而且该程序必须具有并发运行的程序结构;其次强调了这个运行过程必须依赖一个数据集合而独立运行,从而形成了系统中的一个单位。具有动态性,并发性,独立性,异步性和结构性五大特征。

系统中其他资源的分配也是以进程为基本单位的。

进程的实体,指的是存储在存储器中且与进程直接相关的实体。在存储器中,进程由程序代码,数据集合和进程控制块三部分组成。在操作系统中,一个程序可对应一个进程,也可对应多个进程。如果一个程序同时对应了多个进程,那么就称这个程序正在被多个进程所共享。如果这些进程在共享同一个程序时,又不会因为程序代码编写方法而产生进程间的干扰和影响,那么这种可共享的程序代码就叫做可重入代码或纯代码。

一个进程一般由三部分组成:进程控制块,进程堆栈和进程数据块。为了指明该进程的私有堆栈和存储数据用的数据块,再进程控制块中应有指向这两部分的指针。

以进程作为分配处理器资源的基本单位显得过于庞大和笨重。于是,人们把程序的运行过程再分割成更小的单位——线程,即把一个进程分割成多个线程。在内存中既有一个代表进程的控制块,也有多个代表线程的控制块,当然,这些线程控制块是归属于进程控制块的。

操作系统在进行资源分配时,对于存储空间资源,系统仍然以进程为单位来进行分配,而对于处理器资源则以线程为单位来进行分配。也就是说,一个进程中的所有线程共享进程的资源,由于线程是基本运行单位,因此在线程控制块中要包含模块代码的指针和代码运行时所需的私有堆栈。

由于线程没有独占的存储空间,所以系统在调度切换线程时,只是考虑如何给线程分配处理器,而无须考虑其他资源的分配,所以调度工作所需的时间开销就小得多。

综上所述,在多线程操作系统中,进程是系统分配资源的基本单位,而线程是系统调度的基本单位。线程是进程的组成部分,同一个进程中的所有线程共享这个进程的所获得的资源。进程为资源分配和管理的对象,而线程就成为了调度的对象。

4. 进程(线程)的同步与通信

为了实现各进程之间的合作和无冲突运行,在各进程之间必须建立一些制约关系,其中一种制约关系叫做直接制约关系,另一种制约关系叫做间接制约关系。

直接制约关系源于进程间的合作间接制约关系源于对资源的共享。在多进程合作工作的过程中,操作系统应该解决两个问题:一是各进程间应该具有一种互斥关系,即对于某个共享资源,如果一个进程正在使用,则其他进程只能等待,等到该进程释放该资源后,等待的进程之一才能使用它(针对间接制约关系);二是相关的进程在执行上要有先后的次序,一个进程要等其伙伴发来通知,或建立了某个条件后才能继续执行,否则只能等待(针对直接制约关系)。

进程之间这种制约性的合作机制叫做进程间的同步。系统中进程的同步是依靠进程与进程之间互相发送消息来保证的。进程间的同步依赖于进程间的通信。在操作系统中,是使用信号量,邮箱(消息邮箱)和消息队列这些被称作事件的中间环节来实现进程之间的通信的。

5. 宏内核与微内核

为了支持系统对进程进行资源分配以及对进程的管理和调度,操作系统必须有一组不是进程的程序模块来完成这些工作。这组程序模块就叫做操作系统的内核。在设计操作系统时,人们常常把一些与硬件紧密相关,运行频率较高的公共基本操作程序模块和一些关键性的数据结构安排在内核中,并在计算机工作时使之常驻内存

一般操作系统的内核应提供中断处理,进程的调度管理和系统的基本操作三方面的功能。

其中有些关键的操作程序是不可中断的,内核中这些不可中断的程序通常叫做原语。

自然的做法:凡是为进程服务的模块就应放在操作系统的内核中。随着进程对服务要求的增加,操作系统的内核就越来越大。首先,由于内核是常驻内存的,因此大内核占用的存储空间大;其次,维护比较困难;再次,使得处理器在内核运行的时间变长,从而不适合在速度要求较高的场合下应用。

把内核各个服务程序模块中的部分内容移到内核的外面作为一个进程来看待,在内核只保留内核服务与用户进程的接口,或者说只保留一个“壳”。在用户进程需要该服务的时候,由这个“壳”通过发送消息的方法与服务进程进行联系,当与这个服务相关的服务进程接收到这个消息时就马上启动这个服务。这样,内核中保留的只是一些服务模块的“壳”,或者说是消息的转送站,于是内核就可以大大变小了。这种内核就叫做“微内核”。

Linux内核应该更适合用于服务器这种硬件环境不会有太大变化,对稳定性要求高的方面,毕竟宏内核在系统的稳定性以及效率上表现是非常突出的。而对于桌面操作系统,微内核往往更有利于扩展有利于简化用户使用的难度,举个最简单的例子就是,用过linux的人可能都会觉得在linux上安装驱动程序是一件多么困难的工作,除非你是高手,原因很简单,linux采用的是单一内核,也就是宏内核,而microsoft的是所谓的微内核,从而把驱动程序网络模块等分割出去。

微内核(microkernel)—在微内核中,大部分内核都作为独立的进程在特权状态下运行,它们通过消息传递进行通讯。在典型情况下,每个概念模块都有一个进程。因此,如果在设计中有一个系统调用模块,那么就必然有一个相应的进程来接收系统调用,并和能够执行系统调用的其他进程(或模块)通讯以完成所需任务。在这些设计中,微内核部分经常只不过是一个消息转发站:当系统调用模块要给文件系统模块发送消息时,消息直接通过内核转发。这种方式有助于实现模块间的隔离(某些时候,模块也可以直接给其他模块传递消息)。在一些微内核的设计中,更多的功能,如I/O等,也都被封装在内核中了。但是最根本的思想还是要保持微内核尽量小,这样只需要把微内核本身进行移植就可以完成将整个内核移植到新的平台上。其他模块都只依赖于微内核或其他模块,并不直接直接依赖硬件。 微内核设计的一个优点是在不影响系统其他部分的情况下,用更高效的实现代替现有文件系统模块将会更加容易。我们甚至可以在系统运行时将开发出的新系统模块或者需要替换现有模块的模块直接而迅速地加入系统。另外一个优点是不需要的模块将不会被加载到内存中,因此,微内核就可以更有效地利用内存。 单内核(宏内核(Micro Kernel))(monolithic kernel)----单内核是一个很大的进程。它的内部又可以被分为若干模块(或者是层次或其他)。但是在运行的时候,它是一个独立的二进制大映像。其模块间的通讯是通过直接调用其他模块中的函数实现的,而不是消息传递。单内核的支持者声称微内核的消息传递开销引起了效率的损失。微内核的支持者则认为因此而增加的内核设计的灵活性和可维护性可以弥补任何损失。

在众多常用的操作系统中,除MINIX和Mach等少数系统外,包括Unix、Linux等在内的众多操作系统都是采用的宏内核(微软声称Windows采用的是改良后的微内核构架,但理论界对此一直有很大争议)。

6. 操作系统的shell

任何操作系统必须为自己提供至少一个接受服务的对象,即自己要给自己提供一个进程。当然,这个操作系统为自己提供的进程还是要由操作系统自己来创建,因此它是操作系统的组成部分。由于这个进程是系统的第一个进程,所以他也被称为“根进程”。这个根进程就是要在显示器上提供一个字符形式(例如操作系统DOS的界面)或者图形形式(例如操作系统Windows的界面)的界面(窗口),并且这个有界面的根进程应能接收用户要求计算机做某项工作的命令,当然也能按照用户命令或者按预先设计创建其他新的进程。由于这个根进程的界面似乎是操作系统的一个可见的“壳”,所以常常把它叫做操作系统的shell或者shell进程。

有些不需要界面的操作系统中,这个根进程可以是一个不做任何事情的空闲进程。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值