美文网首页
操作系统结构

操作系统结构

作者: 啦啦哇哈哈 | 来源:发表于2018-10-09 14:28 被阅读0次

一、操作系统做什么?

1.操作系统定义

A program that acts as an intermediary between a user
and the comupter hardware.
计算机硬件和用户(人和程序)之间的一个中介

2.操作系统目标
  • 使用户方便使用计算机
  • 是计算机硬件高效率运行

二、硬件系统组成

  • cpu(s) + 设备控制器 通过总线(控制(用来通信的,一些状态)、数据和地址三个内部总线和外部总线)连接在一起,它们共享内存
  • 这些cpus和设备并行执行,并且竞争使用内存。


三、4个层次

操作系统把硬件包起来了,所有的对硬件的操作必须经过操作系统。

  • 用户
  • 应用程序
  • 操作系统
  • 硬件

四、现代操作系统的特征

1.多程序 Mutiprogramming

这是为了提高CPU的使用效率

一个简单的例子
如果系统上只能有一个用户。一个用户程序的操作需要CPU执行它的指令,还需要I/O来作它的输入输出。只有CPU指令,没有I/O,这有什么意义hhh,而只有I/O没有CPU更不可能,因为I/O就是CPU控制的。所以有一个很明显的问题就是CPU执行指令时候,I/O就停了,而I/O时候,CPU又停了不执行指令了。
为了解决这种低效问题,一个基本想法就是,可不可以在系统里面装两个程序,当一个在I/O时候,它没有使用CPU,能不能启动另一个程序让它使用CPU?这样不就是让CPU使用率提高了吗?

嗯就是这样,有两个以上程序可以驻留内存,这种状态就叫Mutiprogramming

  • 单用户系统有缺陷,无法让CPU和I/O同时处于运转状态
  • 多程序思想让多个程序竞争CPU,提高了CPU的使用效率
  • 作业调度器每次选择一个作业,交给CPU执行
  • 当前作业需要等待时候(例如有I/O操作),CPU转向另一个作业
2.多任务 Multitasking 分时系统 Timesharing

在多程序思想的基础上扩展,Multiprogramming只要求多个程序驻留在内存中,CPU有空时候给程序分配资源就可以,而Multitasking则要求不但是驻留在内存,还要求在程序需要CPU时候,CPU能及时给它!响应用户的交互操作。称为交互式计算

一个简单的例子
如果不具备这样的及时性,会有什么后果?一台计算机,能播放PPT还能接收邮件,这算是有多程序思想了。此时如果你在这里疯狂读PPT,而永远不去理睬e-mail,接收e-mail的程序永远得不到CPU资源,那么e-mail发过来了不响应就丢失了。邮件是什么,邮件给谁的,这并不重要,但是必须要先及时的响应,把它接收过来,不然就丢失在茫茫网海中了hhh。所以读PPT时候,要让邮件程序有收邮件的机会。而反过来一样,如果在接受一个很大的邮件,需要一定的时间接收,PPT此时得不到CPU,不动了,那还怎么学习,会给用户造成机器死机的感觉。

这就是Multiprogramming的重要性。必须要支持这样的需求!由此引出了操作系统的各种概念。

  • 响应时间 Response time 在一秒内
  • 每个用户至少有一道作业在内存中执行——进程
  • 存在两个以上的进程等待CPU执行——CPU调度
  • 内存空间装不下进程——需要换入、换出操作
  • 虚拟内存管理技术,是的小内存也能运行大进程
3.CPU提供Dual-mode机制
  • 用户态(user mode)和内核态(kernel mode)
    这样是为了OS的自我保护。从硬件层解决这个问题,CPU有个Mode bit模式位,可以在内核态(1)和用户态(0)之间切换。
    • 以Mode bit区分系统在执行用户代码还是内核代码
    • CPU带有特权指令,这些指令只能在内核态执行。特权指令一般是可能引起损害的机器指令。
    • 用户态下需要操作系统服务,那么系统调用此时就会从用户态切换至内核态,系统调用返回指令自动从内核态切换到用户态。


4.其他特征
  • 中断驱动的硬件操作:什么任务到了,引发一个中断,没有中断就休息了。有任务才去搞。
  • 软件申请,软件操作错误等,将产生异常或陷入
  • 面临
    • “无限循环”问题
    • 进程干扰其它进程问题
    • 进程干扰OS问题
      ......

五、操作系统的服务类别

一共有两类服务。

1.一类服务直接帮助用户
  • 用户界面(UI user interface)
    用户通过用户界面向操作系统下达命令。

    • 命令行CLI(Command-Line)
      文本命令,用户直接输入让操作系统执行的命令。如shell。
    • 图形用户界面GUI(Graphics User Interface)
      提供了视图,有定位设备指挥I/O,从菜单选择,选中部分并用键盘输入文本等等 。这个最常见不过了。
    • 批处理(Batch)
      这是个啥我也没见过具体例子Hhh,控制命令和命令的指令被输入文件中,通过执行文件来实现。
  • 程序执行
    是OS能够装入程序到内存,执行驻留在内存的程序,结束程序的而执行,以及出错时候的异常处理。

  • I/O操作

  • 文件系统相关操作

  • 进程间通信

    • 通过共享内存实现通信
    • 通过消息传递实现通信
  • 出错检测
    要能随时应对系统出错,对各种各样的来自CPU、内存或I/O设备等地方的错误提供调试、查错工具。

2.另一类服务确保系统共享资源的高效运作

就是我们在上面举例中的PPT和e-mail按个实例

  • 资源分配

  • 记账——跟踪记录那些用户使用了多少资源,使用了哪些资源

  • 保护和安全

    • 保护——确保对资源的访问是受控的
    • 安全——外来访问需要通过身份认证,不允许非法访问

六、操作系统的服务功能

进程管理
内存管理
存储设备管理
大容量存储器管理
I/O子系统管理

七、系统调用 System Calls

用户程序和系统软件与操作系统之间的界面。提供了操作系统的有效服务界面。

一个简单例子

这是进行文件复制时候的一个示例,用到了各种系统调用,文件管理的这些操作的实现都是要通过操作系统的系统调用来帮忙:
1.通常用高级语言C/C++实现
2.程序通常以API(Application Program Interface)使用,而不是直接使用系统调用。
3.三种流行的APIs
  • Win32 API for Windows
  • POSIX API for POSIX-based systems(UNIX\Linux和Mac OS X版本)
  • JAVA API for the JVM
4.为什么要用API,而不是直接系统调用?

因为太菜了hhhh,开个玩笑。
普通用户不懂啊,普通的用户要理解系统调用的概念是有困难的,编程序的人可能不懂这个啊,也要让他去写程序。比如linux系统调用都是使用int 0x80号中断来实现的,普通用户根本不懂这些中断什么的。所以OS提供API,用户可以调用比较容易一点的API来实现系统调用。而不是把系统调用扔给你。

一个简单示例
下面就是调用标准C库里面的printf,用户调用printf,C程序拦截了这个调用来调用必要的操作系统调用(这里是write()),真正实现写字符输出的是系统调用的write(),用户程序只需要调用C库中的API就可以了。这个printf则是专业人士写的,为了用户的方便,他不用去用中断去实现打印,而只需要调用printf,printf帮助它做更底层的东西——引起int 0x80,进入内核态,调用write(),write()完成任务之后,又跳回到用户态,printf的代码中,printf再return到用户程序。


API和System Call和操作系统之间的关联如下所示


八、系统程序 System Programs

系统程序提供了一个方便的环境以开发程序和执行程序,其中一小部分知识系统调用的简单接口,其他可能是相当复杂的。

系统程序分类

  • 文件操作
  • 状态信息展示
  • 文件内容修改
  • 编程语言支持
  • 程序装入和执行
  • 用户间通信

以用户考察OS的视角,OS是以系统程序描述的,而不是系统调用。

九、操作系统结构

简单结构

层次化结构


从低到高:
硬件——硬件设备控制器——内核驱动程序——内核里的管理子系统——内核提供的系统调用——用户程序

微内核 microkernel

基本思想:尽量把内核中的所有非基本部分移出到用户态空间,将它们实现为系统程序或用户程序。剩下的就是微内核(通常包含最小的进程、内存管理以及通信功能)。处于用户态空间的功能模块通过消息传递机制进行通信。

  • 有利因素
    • 容易升级微内核
    • 容易移植OS到不同类型的CPU、体系结构
    • 更可靠
    • 更安全
  • 不利因素
    -被移出之后,用户态空间的程序增多,它们之间通信都要借助操作系统帮忙,每次通信都要从用户态转到内核态,不停的切换,那么用户态和内核态空间通信频繁,性能开销大,这是很致命的!


模块 modules

现代操作系统大多实现了内核模块机制。

  • 应用面向对象思想方法
  • 核心组件相对独立、分离
  • 模块之间通过预知的界面对话
  • 可动态装入内核
  • 可动态卸载

相关文章

  • 3.4、Unix/Linux体系结构、信号编程初步

    1、Unix/Linux操作系统体系结构类Unix操作系统体系结构分为两个状态,用户态和内核态以及硬件a)操作系统...

  • 操作系统 操作系统结构

    操作系统的结构需要从这几个方面来考虑:他为用户提供了哪些服务和界面,系统各个组成部分及其相互关系 操作系统的操作 ...

  • 操作系统结构

    操作系统提的服务 用户界面:用户界面分为两种,一种是命令行界面(command-line interface,UI...

  • 操作系统结构

    一、操作系统做什么? 1.操作系统定义 A program that acts as an intermediar...

  • Linux指令集

    Android操作系统底层Linux Android基于Linux 2.6.x内核 Android操作系统的结构 ...

  • 操作系统逻辑结构

    操作系统的逻辑结构是指操作系统的设计和实现思路 逻辑结构的种类 整体式结构以模块为基本单位构建模块设计、编码和调试...

  • 操作系统笔记

    操作系统原理——华中科技大学苏曙光已完结 1.操作系统概述2.操作系统逻辑结构3.操作系统的用户界面(1)操作系统...

  • 文件管理 --- 目录结构

    Linux标准目录结构(FHS) 所有unix和类unix操作系统的目录结构均是以根开始的倒挂树形结构 =====...

  • 计算机操作系统笔记(三)

    操作系统的逻辑结构 逻辑结构 OS的设计和实现思路。 逻辑结构的种类 1.整体式结构2.层次式结构3.微内核结构(...

  • 计算机是如何存储数据

    编程基础:《编码》、操作系统(维基百科)、《数据结构与算法分析》、《代码大全》。 硬件----操作系统----浏览...

网友评论

      本文标题:操作系统结构

      本文链接:https://www.haomeiwen.com/subject/byzsaftx.html