美文网首页
操作系统结构

操作系统结构

作者: 啦啦哇哈哈 | 来源:发表于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

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

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

    相关文章

      网友评论

          本文标题:操作系统结构

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