操作系统笔记1:知识回顾和操作系统概述

知识回顾

冯·诺依曼体系结构

  • 只用北桥的话性能好,但需要集成封装,可扩展性差,且北桥造价高。
  • 只用南桥的话可扩展性好,造价更低,但是性能不够好。
  • 北桥更新换代更快。
  • 智能手机也符合冯·诺依曼体系结构。

结构特点

可编程、计算和存储分离

  1. 采用指令和数据存储在一起的结构
  2. 存储器是按地址访问、线性编址的空间
  3. 指令由操作码和地址码组成:MOV AX, 2
  4. 指令在CPU的运算单元处理
  5. 控制流由指令流产生

新的体系结构

背景:云原生和软件定义的出现。

  • 智能网卡:在网卡内进行计算
  • 存内计算:把CPU和内存进行整合
  • RDMA:远程直接数据存取,通过网络把资料直接传入计算机的存储区,将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响

计算机指令

  • CPU是执行各种计算机指令的逻辑机器
  • 计算机指令也被称为机器语言,由一串0和1组成
  • 不同架构的CPU能听懂的语言不太一致,每种CPU均有其支持的计算机指令集
  • 指令执行的流程:硬盘→内存←→CPU

内存布局

  • BP(基址指针寄存器):与SS配合使用,指向栈底
  • SP(堆栈指针寄存器):与SS配合使用,指向栈顶
  • SI(源变址寄存器):存放相对于DS段的偏移量
  • IP(指令指针寄存器):与CS配合使用,跟踪程序的执行过程

8086 vs 80386

  • 8086:采用实模式(物理内存一一映射),直接左偏移,存在安全隐患,且寻址的范围较小
  • 80386:采用保护模式(引入虚拟内存),使用段选择子寄存器,较为安全,寻址范围较大

内存操作

函数调用

  1. 参数入栈:将参数从右向左依次压入系统栈中
  2. 返回地址入栈: 将当前代码区调用指令的下一条指令地址压入栈中, 供函数返回时继续执行
  3. 代码区跳转: 处理器从当前代码区跳转到被调用函数的入口处
  4. 栈帧调整
    (1)保存当前栈帧状态值,已备后面恢复本栈帧时使用:BP入栈
    (2)将当前栈帧切换到新栈帧:将SP值装入BP,更新栈帧底部
    (3)给新栈帧分配空间:把SP减去所需空间的大小,抬高栈顶

函数返回

  1. 保存返回值,将函数的返回值保存在寄存器AX
  2. 弹出当前帧,恢复上一个栈帧
    (1)将当前栈帧底部保存的前栈帧BP值弹入BP寄存器,恢复出上一个栈帧
    (2)将函数返回地址弹给IP寄存器
  3. 跳转:按照CS:IP跳回调用函数中继续执行

函数调用和返回实例

int static add(int a, int b){   
0:   55                       push   rbp   
1:   48 89 e5                 mov    rbp,rsp   
4:   89 7d fc                 mov    DWORD PTR [rbp-0x4], edi   
7:   89 75 f8                 mov    DWORD PTR [rbp-0x8], esi 
a:   8b 55 fc                 mov    edx, DWORD PTR [rbp-0x4]   
d:   8b 45 f8                 mov    eax, DWORD PTR [rbp-0x8]  
10:   01 d0                   add    eax, edx
}  
12:   5d                      pop    rbp        # 这里把红色的rbp赋值给rbp
13:   c3                      ret    

0000000000000014 <main>:int main(){  
14:   55                       push   rbp  
15:   48 89 e5                 mov    rbp,rsp  
18:   48 83 ec 10              sub    rsp,0x10  # 开辟栈空间
1c:   c7 45 fc 05 00 00 00     mov    DWORD PTR [rbp-0x4], 0x5 
23:   c7 45 f8 0a 00 00 00     mov    DWORD PTR [rbp-0x8], 0xa    
2a:   8b 55 f8                 mov    edx, DWORD PTR [rbp-0x8]  
2d:   8b 45 fc                 mov    eax, DWORD PTR [rbp-0x4]  
30:   89 d6                    mov    esi, edx  
32:   89 c7                    mov    edi, eax  # 这四步看起来冗余,实际上提高了性能
34:   e8 c7 ff ff ff           call   0 <add>   # 函数声明必须在调用之前,否则不知道call哪里
                               # 内存中看不出来函数返回值类型,因此只有函数返回值不同的不是函数重载
39:   89 45 f4                 mov    DWORD PTR [rbp-0xc], eax  
3c:   b8 00 00 00 00           mov    eax,0x0
}  
41:   c9                       leave    
42:   c3                       ret 
堆栈示意图

CPU执行指令流程

操作系统概述

操作系统的特征

  • 并发(Concurrence):同时存在多个运行的进程(多道程序), 需要OS管理和调度
  • 共享(Sharing)
    • 互斥共享: 某种资源(e.g., CPU)某时刻只能被一个进程独享
    • 同时访问: 允许在一段时间内由多个进程交替访问(e.g., 磁盘)
  • 虚拟(Virtual)
    • 利用多道程序设计技术, 让每个进程和每个用户觉得
    • 有一个处理器(CPU) 专门为他服务
  • 异步(Asynchronism):进程执行不是一贯到底, 而是走走停停且执行速度不可预知

操作系统的功能

  • 计算机系统资源的管理者
  • 用户与计算机硬件系统之间的接口

操作系统的分类

单道操作系统

  • 多个进程按照先来先服务的方式顺序执行(排队系统)
  • 内存中只有一个进程运行且它需要执行完毕(独占内存) 👉 工业系统中能够保持鲁棒性和安全性
  • 运行时, 高速CPU进程要等待低速I/O完成, 限制系统吞吐量 👉 南桥比北桥慢,北桥需要等南桥加载完数据,性能低

多道操作系统

  • 内存中同时存放多个相互独立的进程 👉 靠操作系统来调度:谁实际使用CPU,和文件系统之间的连接(换页等)
  • 宏观上并行(先后开始各自的运行, 但都未运行完毕)
  • 微观上串行(轮流占有CPU)
  • 资源利用率和系统吞吐量均增大
  • CPU、内存、I/O设备资源分配问题复杂
  • 大量进程和数据组织和存放的安全性和一致性问题

分时操作系统

  • 分时技术: 处理器的运行时间分成很短的时间片
  • 按时间片轮流把处理器分配给各个用户或进程使用
  • 存在系统延时,适用于银行系统、购票系统等

实时操作系统

  • 计算机系统接收到程序请求后会立即处理, 并在严格的时限内处理完成该程序
  • 可靠性和实时性保证较难
  • 一般需要专门设计, 普适性较差
  • 是未来发展的趋势,例如手机系统

操作系统的体系结构

宏内核

将操作系统的主要功能模块作为整体运行在核心态, 以此来为应用程序提供高性能服务

  • 模块间信息共享→ 性能优势明显
  • 程序服务需求增加、接口形式更复杂→功能耦合度高、模块化程度下降, 内核设计庞大且复杂

微内核

解决操作系统的内核代码难以维护问题,即将内核最基本功能(e.g., 进程、线程管理) 保留, 剩余功能移到用户态执行

  • 降低了内核设计的复杂度
  • 具有更好的分层和模块化接口
  • 性能问题:频繁的在用户态和内核态切换
  • 未来发展的方向
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值