【JZ2440】【知识点1】【操作系统理解】

       本文会介绍:操作系统基本理解、组成、内核组件和功能、操作系统设计方式、操作系统发展、应用软件与操作系统的交互。

一、操作系统概念:

              用一个软件层将应用程序与它们所访问的硬件分隔开,并提供一些服务,我们将这个软件层称为操作系统。

              主要用途:1、使应用程序能够与计算机硬件交互作用;2、管理系统的硬件和软件资源。

              内核:操作系统是一个软件,它可以使应用程序与计算机硬件交互。这种软件包含操作系统的核心组件,我们将这些核心组件称为内核。

        内核组件包括:

              l 进程调度程序

              l 内存管理程序

              l 设备管理程序

              l 进程间通信(IPC)管理程序

              l 文件系统管理程序

 

         内核与操作系统的区别:

              内核:是操作系统的基础也是核心模块,用于管理系统资源,如:对软件层面的抽象和对硬件访问的抽象

              操作系统:在内核基础上的延伸,包括了提供基础服务的系统组件。

    操作系统大致包括:引导程序、内核、Shell、驱动、运行库等等。

 

二、操作系统的体系结构:

       根据内核程序的组织结构,可以将操作系统划分如下:

(1)单内核设计

        即内核在结构上可以看做一个整体。操作系统的每一个组件都包含在内核中,并能够直接与其它任何组件进行通信。

        特性:1、由于组件之间直接进行通信,所以单内核操作系统效率很高。2、由于单内核操作系统将组件集合在一起,所以无论如何,要查处bug和其它错误的来源都不是件容易的事;3、由于所有代码的执行都可以不受限制地访问系统,所以单内核系统尤其容易受到错误代码或者恶意代码的破坏。

(2)分层设计

       即将执行相似功能的那些组件分组为层,每层增加抽象层,它建立在较低层提供的函数接口之上,每一层的程序只能使用其底层模块提供的功能和服务,即底层程序为高层程序提供服务,高层可以通过接口调用底层的功能,反之则不能。较低的层使用一个将其实现隐藏起来的接口为较高的层提供服务。分层设计的概念并不仅用于操作系统,许多较好的软件系统设计都采用分层结构。

       特性:1、分层的操作系统比单内核操作系统具有更好的模块性,因为对每一层的实现进行修改时,都不需要修改其它层。2、按照分层式结构设计的操作系统,不但系统结构清晰,而且不会出现循环调用。3、主要优点有按照单向调用关系,以层为单位组织各模块,使得模块之间的依赖、调用关系更加清晰和规范。4、和单内核结构相比,采用分层方法,一个用户进程的请求可能需要传过许多层才能得到服务,在单内核操作系统中,要为与此相似的请求提供服务,可能只需要执行一次调用,所以分层设计性能会有所降低。5、由于所有层都可以不受限制地访问系统,所以分层的内核也容易遭到错误代码或恶意代码的破坏。

(3)微内核设计

       微内核操作系统体系结构只提供少量的服务,大多数操作系统组件(例如,进程管理、网络连接、文件系统交互和设备管理)在内核的外部执行,它们具有较低的权限级别。原则上,这将使内核更小,更容易编写和维护。在微内核设计中,在单块内核中通过函数调用完成的许多工作都是要使用微内核的消息传递来处理的。

微内核的主要作用是调度程序以及在程序之间传递信息。

微内核设计的一个影响是组件间的通信,本可以通过参数传递或共享变量进行的通信都必须由微内核的消息进行传递。

    

三、操作系统的发展和主要操作系统类型:

(1)批处理操作系统

(2)分时操作系统

(3)实时操作系统

(4)微机操作系统

(5)网络操作系统

(6)多处理器操作系统

(7)分布式操作系统

(8)嵌入式操作系统

 

四、应用软件和操作系统的交互

       系统调用:

       最后涉及的一个主题是:应用程序和操作系统之间的连接,这种连接方式是通过系统调用。从理论上讲,系统调用是一种机制,通过这种机制,进程可以向操作系统强求一种服务。

    系统调用示例:

           fork():创建一个新的进程,此进程是现有进程的复制。

           exit():终止请求进程。

           open():打开一个文件进行读和写操作。

           read():从文件或设备中检索数据。

           write():把数据写到文件或设备中。

程序示例:

int load_hdr(char *name,char *buf)

{

      int fd;

      fd=open(name,O_RDONLY);

      if(fd<0)

          return 0;

      n=read(fd,buf,HDR_SIZE);

      close(fd);

      return(n);

}

    分析:首先打开文件进行读取。open()系统调用返回一个模型文件描述符,此描述符用于与这个文件相关的其它调用。在read()系统调用中,向操作系统发送请求,将文件中的数据复制到内存空间buf中。由HDR_SIZE给定请求的字节数,fd确定要读取哪个文件。上述操作完成后,系统调用返回实际读取的字节数,如果操作系统检测到错误,无法读取任何数据,那么它就返回-1,并设置全局变量errno来说明检测到哪类错误。

从这个例子可以看出系统调用的一个共同的特点。1、我们需要一个机制来指定我们可以请求哪些服务,此例中是read()函数调用来指定所请求的服务。2、进程的大多数请求都需要请求能提供一些参数。3、几乎所有与的系统调用都产生结果。至少,它们产生的状态能表明请求成功与否。

 

      实现系统调用的方法:

控制的切换经常是通过某种类型的软件中断指令完成,软件中断指令通常称为陷阱(Trap)。这些特殊的指令使CPU保存当前的运行状态,并切换到操作系统中的函数。

 

 ——操作系统 吴小平 罗俊松 编著

 ——操作系统原理、设计与应用 Brian L.Stuart著 葛秀慧 田浩 刘展威 等译

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值