操作系统学习(2)


大体了解操作系统的结构

Operating-System Services(操作系统提供的服务)

  • User interface(用户接口)
    -Command-Line Interface (CLI) 命令行接口
    -Graphics User Interface (GUI) 图形接口
    -touch screen 触摸屏

  • Program Execution(运行程序)

  • I/O operations(I/O操作)
    -管理I/O设备,进行I/O操作

  • File-System Manipulation(文件系统管理)
    -读写文件,新建/删除文件,查看文件信息。。。

  • Communications(通信)
    -统一计算机中进程间的通信
    -不同计算机间网络的通信
    -一般通过shared memory(共享内存)和message passing(消息传送)实现

  • Error Detection(错误检测)
    -硬件/软件错误的检测与处理

  • Resource Allocation(资源分配)
    -内存/磁盘/…资源的分配

  • Accounting(帐号管理)

  • Protection and security

system calls(系统调用)

  • 系统调用是进程和操作系统间的一个接口

  • 一般由C/C++语言编写,甚至是汇编语言

  • 用户空间的程序通过系统调用请求系统内核空间的服务

API(application programming interface)

  • 系统调用的更高级接口,可以看成是系统调用的封装

  • 提供了每个函数的参数以及返回值

  • 通过API间接调用系统调用

  • 相比直接使用系统调用,使用更加简单,移植性更高

常用的公共API
  • Win32 API for Windows

  • POSIX API for POSIX-based systems (including virtually all versions of UNIX, Linux, and Mac OS X)

  • Java API for the Java virtual machine (JVM)

System Call Number(系统调用号)

  • 系统调用实现时,一般会使用一个叫系统调用表的东西

  • 每个系统调用对应一个系统调用号,通过系统调用号来区分入口函数

System Call Parameter Passing(系统调用参数传递)

  • Register
    参数储存在寄存器中,传递寄存器中的参数给系统调用

  • Block
    参数储存在内存中的block(块)/table(表)中,将块/表的地址作为参数传给系统调用

  • Stack
    程序将参数压入栈,然后操作系统将参数弹出栈,实现参数的传递

System Call Types(系统调用类型)

  • process control

  • file management

  • device management

  • information maintenance

  • communication

  • protection

MS-DOS(single-tasking/单任务系统)进程控制

如下图:

  • 系统启动后,调用command interpreter命令解释器

  • 载入程序,覆盖除了内核、一部分的命令解释器以外的内存空间

  • 程序运行,如果出现错误,将错误代码保存在内存中

  • 一小部分的command interpreter没有被覆盖,该部分command interpreter恢复剩下的command interpreter,并且command interpreter会保留之前的错误代码给用户或者下一个程序使用

FreeBSD(multitasking/多任务系统)进程控制

如下图:

  • 可以同时运行多个进程

  • interpreter也不会被覆盖

System Programs(系统程序)

  • 系统程序一般不是操作系统内核的一部分

  • 但它是操作系统的一个重要的组成部分

  • 系统程序为其他程序的开发和运行提供了一个便利的环境

常见系统程序

  • File Management
    文件的创建/删除/复制/重命名/…

  • Status Information
    时间/日期/可用内存大小/磁盘空间/用户数量…的获取

  • File Modification
    文本编辑器….

  • Programming-Language Support
    编译器/汇编器/调试工具/解释器…

  • Program loading and execution
    一旦一个程序被编译或者汇编完成后,它必须被加载到内存中去运行,就需要相应的系统程序

  • Communications

  • Background services(后台服务)

Operating System Structures(操作系统结构)

1
General-purpose OS is a very large program

Simple structure

  • 很多商业操作系统没有明确定义的结构

  • 这些操作系统最初都是比较小、简单并且功能有限系统

MS-DOS
  • 使用最小的空间实现最多的功能

  • 应用程序能够访问基本的I/O子系统,直接写到显示器和磁盘驱动程序中

  • 所以,用户程序的错误容易导致系统的崩溃

  • 受到硬件的限制(Intel 8088没能提供双模式和硬件保护)

传统UNIX
  • 也受到硬件的限制

  • 内核层承担太多的功能,导致很难实现和维护

Layered Approach(分层)

  • 将整个系统进行分层

  • 没一层都是对逻辑数据以及操作的实现

  • 上一层可以访问下一层,上一层依赖于下一层

  • 将功能进行分散,更加灵活,更容易维护,也更容易拓展,更容易调试

  • 分层需要进行严格的规划

  • 从上层到下层的过程中,没一层都需要传递参数,更改数据,会降低效率

  • 大多系统一定程度上都有分层现象

Microkernels(微内核)

  • 将内核的部分功能拿到用户空间,使内核变得更小

  • 拓展变得更加容易,因为不用更改内核

  • 由于系统功能开销的不断增长会导致系统性能的下降
使用Microkernels结构的系统
  • Mach

  • Tru64 UNIX

  • QNX

  • Mac OS X kernel(Darwin)(Based on the Mach microkernel)

  • Windows NT第一个版本

Modules(模块化)

  • 使用可加载的内核模块(loadable kernel modules)

  • 更加的灵活,拓展性更好

  • 这种使用动态加载模块的方法在现代UNIX ,Solaris,Linux,Mac OS X,Windows中均很常见

Hybrid Systems(混合系统)

Mac OS X

IOS

Android

0%