• 操作系统自学笔记(一) 操作系统概述


    仅为自学时的笔记, 如有问题请多指教


    目录

    操作系统的启动

    操作系统的"定位"

    操作系统的特征

    运行机制

    体系结构 

    中断

    中断的分类​

    外中断处理过程

    系统调用

    系统调用与库函数的区别​

     过程

    感悟


    操作系统的启动

    DISK: 存放OS

    BIOS: 基本I/O处理系统

    POST(加电自检)寻找显卡, 执行BIOS

    BIOS从某个特定的地址开始执行

    Bootloader一般是在放在硬盘的第一个主引导扇区

    BIOS将Bootloader从DIST放到内存中,Bootloader将OS加载到内存中

    以X86为例


    进程 是一个程序的执行过程。执行前需要将该程序放到内存中,才能被CPU处理


    操作系统的"定位"

    命令接口 (直接使用)

    • 联机命令接口(交互式命令接口)  比如cmd中逐行执行的命令
    • 脱机命令接口(批处理命令接口)  比如.bat脚本

    程序接口 如程序调用的.dll文件,用户通过程序间接调用, 由一组系统调用(广义指令)组成(程序接口=系统调用)

    有关系统调用可以参照下面

    操作系统的特征

    • 并发:计算机系统中存在多个同时运行的程序, 需要OS管理和调度
    • 共享:"同时"访问 / 互斥共享
    • 虚拟:将硬件层面抽象, CPU→进程  磁盘→文件  内存→地址空间 , 用户对于计算机产生一种独自占有的感觉
    • 异步:程序的执行走走停停,速度不可预知; 但运行环境相同, OS需保证运行结果也相同

     并发与共享相互共存

    并发:指两个或多个事件在同一时间间隔内发生。宏观上同时发生, 微观上是交替发生的。
    并行:指两个或多个事件在同一时刻同时发生。

    运行机制

    体系结构 

     

     

    内核功能划分的不同方式, 对应着不同的体系结构: 大内核与微内核

    操作系统的体系结构与企业管理相似
    内核就是企业的管理层,负责一些重要的工作。只有管理层才能执行特权指令,普通员工只能执行非特权指令。用户态、核心态之间的切换相当于普通员工和管理层之间的工作交接

    • 大内核:企业初创时体量不大,管理层的人会负责大部分的事情。优点是效率高;缺点是组织结构混乱,难以维护。
    • 微内核:随着企业体量越来越大,管理层只负责最核心的一些工作。优点是组织结构清晰,方便维护;缺点是效率低。

    中断

    1. 当中断发生时,CPU立即进入核心态
    2. 当中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理
    3. 对于不同的中断信号,会进行不同的处理

    发生了中断,就意味着需要操作系统介入,开展管理工作。由于操作系统的管理工作(比如进程切换、分配I/O设备等)需要使用特权指令,因此CPU要从用户态转为核心态。

    中断可以使CPU从用户态→核心态 ,使操作系统获得计算机的控制权。有了中断,才能实现多道程序并发执行

    核心态→用户态”的切换是通过执行一个特权指令,将程序状态字(PSW)的标志位设置为“用户态”

    中断的分类

     另一种分类方式

    外中断处理过程

    • 执行完每个指令之后,CPU都要检查当前是否有外部中断信号
    • 如果检测到外部中断信号,则需要保护被中断进程的CPU环境(如程序状态字PSw、程序计数器Pc、各种通用寄存器)
    • 根据中断信号类型转入相应的中断处理程序
    • 恢复原进程的CPU环境并退出中断,返回原进程继续往下执行
       

    系统调用

    系统调用” 是操作系统提供给应用程序(程序员/编程人员〉使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以发出系统调用请求来获得操作系统的服务。

    例如:设备管理, 文件管理, 进程控制, 进程通信, 内存管理

    凡是与资源有关的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统提出服务请求,由操作系统代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。

    系统调用与库函数的区别

     过程

    注意:

    • 陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,从而CPU进入核心态
    • 发出系统调用请求是在用户态,而对系统调用的相应处理在核心态下进行
    • 陷入指令是唯一一个只能在用户态执行,而不可在核心态执行的指令(前面我们知道核心态既可以执行特权指令也可以执行非特权指令,但这里的陷入指令无法执行)

    以Linux为例,下面这类的即为系统调用号,可以告诉操作系统执行相应的处理程序

    #define __NR_read 0
    #define __NR_write 1
    #define __NR_open 2
    #define __NR_close 3
    #define __NR_stat 4
    #define __NR_fstat 5
    #define __NR_lstat 6
    #define __NR_poll 7
    
    

    感悟

    凡是涉及共享资源或者直接影响其他进程的操作, 牵连到系统安全性的, 必须通过系统调用的方式,请求操作系统介入

  • 相关阅读:
    提高情商的八种方法
    线程安全与可重入
    【Linux必知必会】initrd.img、vmlinux和 vmlinuz************
    shell调试技术
    (转)DeviceIOControl详解
    软件质量特性及其子特性列表
    【Linux必知必会】initrd.img、vmlinux和 vmlinuz
    驱动程序与应用程序之间共享内存
    调试器GDB
    知道IP地址和子网掩码。算出网络地址、广播地址、地址范围、可用的主机数
  • 原文地址:https://www.cnblogs.com/Knight02/p/16006971.html
Copyright © 2020-2023  润新知