0%

操作系统 - 基础知识

Tegallalang_ZH-CN1855493751_1920x1080.jpg

操作系统视频

基本特征

  • 并发

    • 并发:在一段时间内同时运行多个程序。操作系统引入进程和线程,使得程序能够并发执行
    • 并行:在同一时刻同时运行多个指令。并行需要硬件支持,比如多核 CPU
  • 共享

    系统中的资源可以被多个并发进程共享

    • 互斥共享:互斥共享的资源称为临界区。在同一时刻只允许一个进程访问,需要用同步机制来实现临界区的访问
    • 同时共享:同一时刻运行多个进程访问,不需要同步机制
  • 虚拟

    把物理实体转化为逻辑实体

    • 时分复用技术:进程或线程的时间片轮询技术。每个虚拟处理器获得时间片后,可供进程执行
    • 空分复用技术:虚拟内存
  • 异步

    进程不是一次性执行完毕,而是走走停停,以不可知的速度向前推进

基本功能

  • 进程管理

    进程控制、进程同步、死锁处理、进程通信等

  • 内存管理

    内存分配、内存映射、虚拟内存、内存保护和共享等

  • 文件管理

    文件存储、目录管理、文件访问和保护等

  • 设备管理

    缓冲管理、设备分配、设备处理等

用户态 & 内核态

操作系统启动之后,会加载操作系统的内核,然后将操作系统的控职权交由内核管理。内核与应用程序、外部设备等打交道

用户态和内核态

  • 当进程执行应用程序的代码时,处于用户态
  • 当进程通过系统调用陷入内核态执行内核代码时,处于内核态

用户态和内核态是操作系统的两种运行级别,用户态的运行级别最低,内核态的运行级别最高;对 Linux 操作系统来说,当程序运行在 3 级特权时处于用户态,当程序运行在 0 级特权时处于内核态

对于 32 位操作系统来说,用户态的地址空间是 03G1,内核态的地址空间是 3G4G1

用户态转内核态(中断)

  • 系统调用
  • 异常
  • 外中断

系统调用、异常、外中断可以统称为中断,中断根据来源不同还可以分为硬中断和软中断

  • 硬中断:由硬件发出的中断请求
  • 软中断:由软件发出的中断请求

由用户态转内核态的系统开销会很大:

  • 引导机制
  • 建立内核堆栈
  • 验证参数
  • 内核态映射到用户态的地址空间

系统调用 & 异常

操作系统与应用程序打交道主要通过系统调用和异常实现

  • 系统调用:应用程序调用系统调用接口,主动向操作系统发出的服务请求,应用程序正常运行
  • 异常:应用程序产生异常,指令执行失败,内核通过异常服务处理,捕获到应用程序的异常并抛出异常

外中断

操作系统与外部设备打交道主要通过中断机制实现。例,键盘输入时会把数据写到一个特定的缓冲区,这个缓冲区有大小限制,如果数据超过其限制大小就会造成数据丢失,所以外部设备需要通过中断机制,及时向内核发出指令,然后内核通过调用设备驱动程序,及时把缓冲区的内容读写到内核中

中断和陷入:

  • 外中断(中断)

    CPU 外部引起的中断。中断是 CPU 对 IO 设备发来的中断信号的一种响应。当发生中断时,CPU 停止正在执行的程序,保留 CPU 的环境,转而去执行相应的中断处理程序。执行完中断处理程序后,再回到 CPU 断点继续执行原来的程序

  • 内中断(陷入)

    CPU 内部引起的中断,如非法指令、地址越界等。当发生陷入时,CPU 停止正在执行的程序,保留 CPU 的环境,转而去执行陷入处理程序。执行完陷入处理程序后,再回到 CPU 断点继续执行原来的程序

中断处理方式

  • 屏蔽中断

    当 CPU 处理一个中断时,会屏蔽其他的中断,直到 CPU 处理完本次中断后再去检查是否还有中断发生

    优点:简单

    缺点:不适用实时性比较高的中断

  • 嵌套中断

    设置中断优先级。当同时有多个优先级的中断请求时,CPU 优先处理高优先级的中断;高优先级的中断可以抢占正在运行的低优先级的中断

pic

三者比较

  • 源头:中断是外设引起的,系统调用是应用程序主动请求系统服务,异常是应用程序意想不到的错误
  • 响应方式:中断是异步的,系统调用是同步或异步的,异常是同步的

大内核 & 微内核

  • 大内核:将操作系统的功能作为紧密的整体放到内核中
    • 优点:各模块共享信息,性能高
    • 内核复杂度高
  • 微内核:将一部分功能移除内核,降低内核的复杂度
    • 内核复杂度低
    • 频繁进行系统调用,造成性能开销。应用进程与移到用户态的操作系统功能需要通过内核来进行通信

链接

高级语言编译成汇编语言,汇编语言再次编译成二进制程序,如果有函数调用需要经过连接进行合并生成最终的目标文件

pic

静态链接和动态链接

静态链接和动态链接

  • 静态链接

    在生成可执行文件时,把所有需要的函数的二进制码都包含到可执行文件中

  • 动态链接
    在真正使用时,才会将使用的函数的二进制码调入到内存中

硬链接 & 软连接

理解 Linux 的硬链接与软链接