操作系统1:操作系统结构

操作系统结构

操作系统的目标:

  • 方便使用

  • 高效

image-20200131165027868.png
image-20200131165336332.png
image-20200131165352713.png
image-20200131165426721.png
多任务是多程序的升级版本,不仅像多程序要求的那样、程序挂起驻留在内存中等待CPU,而且要实现CPU时间片的及时分配,以响应用户的交互

image-20200131170324506.png
DOS的存储管理是很简单地将内存作为一个链表,实现了简单的设备管理,没有进程,所以不是现代操作系统

操作系统的其他特征:

image-20200131173019265.png
操作系统要处理软件的错误,很好地实现软件管理

image-20200131173132350.png
用户态和内核态:https://www.cnblogs.com/jiading/articles/12247594.html

  • 用户态无法访问内核态的资源,这防止了黑客通过应用程序攻击操作系统
  • 内核态可以通过一定的方式访问用户态的资源

image-20200201094813239.png
切换的过程对于性能的影响比较大

image-20200201094909968.png
image-20200201094944122.png
image-20200201095027770.png
image-20200201095212644.png

系统调用

http://c.biancheng.net/view/1195.html

什么是系统调用

系统调用(system call)提供操作系统服务接口。这些调用通常以 C 或 C++ 编写,当然,对某些底层任务(如需直接访问硬件的任务),可能应以汇编语言指令编写。

image-20200201095303971.png
所有UNIX系统的API都符合POSIX API

Java可以通过使用虚拟机的API来避开调用操作系统的API,从而实现跨平台

程序员编程时调用API,被调用的文件才是在操作系统上的具体功能实现

image-20200201095759743.png
系统调用实例:

image-20200201100016152.png

来源:https://zhidao.baidu.com/question/2051896315220942947.html

linux系统中,进程进行系统调用进入内核态时,是该进程本身进入内核态还是操作系统新开了一个内核线程?

系统调用实际上是应用程序在用户空间激起了一次软中断,在软中断之前要按照规范,将各个需要传递的参数填入到相应的寄存器中。软中断会激起内核的异常处理,此时就会强制陷入内核态(此时cpu运行权限提升),软中断的异常处理函数会根据应用软件的请求来决定api调用是否合法,如果合法选择需要执行的函数,执行完毕后软中断会填入返回值,安全地降低cpu权限,将控制权交还给用户空间。所以内核提供的api调用,你完全可以认为就是一个软件包,只不过这些软件包你不能控制,只能请求内核帮你执行。
因为内核态和用户态属于同一个进程,所以不存在同一进程内内核态阻塞用户态这种说法,只能是进程是否在内核态执行了阻塞操作而被阻塞。

关于标准库和API的两个知识:

  • https://www.zhihu.com/question/265613872

  • https://www.zhihu.com/question/46763480

    C标准库是在操作系统API上加入独特的算法封装成标准接口的库,使用C标准库可以屏蔽底层实现细节,比如fopen这样的函数,在Windows上通过调用CreateFileEx实现,在linux上通过调用open系统调用实现。不仅是包装,还在上层使用独特的算法提供了用户态缓冲区的功能。

系统程序

image-20200201100220953.png
随着操作系统一并发布的C标准库、编译工具等,以便于软件的开发

操作系统结构

image-20200201101339033.png
层次逐渐发展,越来越新

简单结构

image-20200201101414834.png
resident system program(常驻内存软件)是DOS的主体

层次化结构

image-20200201105937899.png
目前主流的操作系统都采用这种层次化结构

微内核

image-20200201110350992.png
思想是尽量把内核的功能移出到用户态,尽可能减小内核态

现在有了,但是不流行

Linux 为什么还要坚持使用宏内核?

https://www.zhihu.com/question/20314255

模块

image-20200201110708396.png
例如驱动程序,可以动态的装入和卸载

采用了面向对象的方式

猜你喜欢

转载自www.cnblogs.com/jiading/p/12289024.html