当前位置: 首页 > news >正文

计算机系统基础与操作系统笔记

文章目录

    • 一、计算机基本构成(冯诺依曼体系结构)
    • 二、CPU核心指标详解
    • 三、CPU执行指令过程完整解析
      • 1. 指令表设计
      • 2. 指令格式
      • 3. 内存空间示例
      • 4. 指令执行三阶段详细过程
      • 5. 完整执行流程示例
    • 四、操作系统核心功能详解
      • 1. 操作系统的作用
      • 2. 操作系统组成
      • 3. 程序跨平台
    • 五、进程管理
      • 0. 先描述,再组织
      • 1. 进程概念
      • 2. 进程控制块(PCB)详细结构
      • 3. 进程调度机制
      • 4. 进程间通信(IPC)
    • 六、操作系统与编程的关系

一、计算机基本构成(冯诺依曼体系结构)

  1. CPU - 中央处理器,负责执行指令和数据处理
  2. 存储器 - 包括内存(临时存储)和硬盘(永久存储)等存储设备
  3. 输入设备 - 键盘、鼠标、扫描仪等输入信息的设备
  4. 输出设备 - 显示器、打印机、音响等输出信息的设备

二、CPU核心指标详解

  1. 核心数
    • 物理核心:CPU实际拥有的处理单元数量
    • 逻辑核心:通过超线程技术模拟的核心数
    • 例如6核12线程表示6个物理核心,12个逻辑核心
  2. 频率
    • 基础频率:CPU的最低运行频率
    • 加速频率:CPU最高可达到的运行频率
    • 单位GHz,表示每秒可以执行多少亿个时钟周期

三、CPU执行指令过程完整解析

1. 指令表设计

一个CPU能执行的指令在最初设计时就已确定,通过指令表定义:

指令 (instruction)功能说明4位 opcode操作的地址或者寄存器
LOAD_A从 RAM 的指定地址,将数据加载到 A 寄存器00104 位 RAM 地址
LOAD_B从 RAM 的指定地址,将数据加载到 B 寄存器00014 位 RAM 地址
STORE_A将数据从 A 寄存器写入 RAM 的指定地址01004 位 RAM 地址
ADD计算两个指定寄存器的数据的和,并将结果放入第二个寄存器10002 位的寄存器 ID,2 位的寄存器 ID

2. 指令格式

假设每个指令8bit,分为两部分:

  • 前4bit是操作码(opcode):表示指令功能
  • 后4bit是操作数(operand):相当于参数

3. 内存空间示例

地址数据
000101110
100011111
210000100
301001101
1400000011
1500001110

4. 指令执行三阶段详细过程

  1. 取指令阶段
    • CPU根据程序计数器(PC)的值从内存读取指令
    • 例如PC=0时读取00101110
  2. 解析指令阶段
    • 拆分操作码和操作数:0010(操作码) + 1110(操作数)
    • 查指令表得知0010是LOAD_A指令
    • 操作数1110表示内存地址14
  3. 执行指令阶段
    • 从内存地址14(1110)读取数据00000011(3)
    • 将值3存入A寄存器
    • PC自动+1,准备执行下一条指令

5. 完整执行流程示例

  1. 初始状态
    • PC=0
    • A=0, B=0
  2. 执行地址0指令(00101110)
    • 解析:LOAD_A 14
    • 执行:A=内存[14]=3
    • PC=1
  3. 执行地址1指令(00011111)
    • 解析:LOAD_B 15
    • 执行:B=内存[15]=14
    • PC=2
  4. 执行地址2指令(10000100)
    • 解析:ADD B(01) A(00)
    • 执行:A=A+B=3+14=17
    • PC=3
  5. 执行地址3指令(01001101)
    • 解析:STORE_A 13
    • 执行:内存[13]=A=17
    • PC=4
  6. 执行地址4指令(00000000)
    • 结束

四、操作系统核心功能详解

1. 操作系统的作用

  1. 硬件管理
    • 管理CPU、内存、I/O设备等硬件资源
    • 通过驱动程序与硬件交互
  2. 提供稳定运行环境
    • 为应用程序提供统一的API接口
    • 例如Java的System.out.println最终会调用操作系统的write API

2. 操作系统组成

  • 内核:核心功能模块
  • 配套应用程序:提供用户界面和工具

3. 程序跨平台

不同操作系统之间存在天然的兼容性障碍。例如,在Windows环境下开发的程序,无法直接在Linux或macOS系统上运行。这是因为:

  1. 各操作系统使用完全不同的可执行文件格式(如Windows的PE、Linux的ELF)
  2. 系统API调用方式存在根本性差异
  3. 底层硬件架构也可能不同(如x86与ARM)

Java的跨平台

正是为了解决这种平台割裂问题,Java提出了"一次编写,到处运行"的跨平台方案:

  1. 统一字节码:Java编译器将源代码转换为平台无关的.class字节码文件
  2. 定制化JVM:各平台提供自己的Java虚拟机实现
    • Windows平台:Windows版JVM
    • Linux平台:Linux版JVM
    • macOS平台:macOS版JVM
  3. 无缝衔接:虽然各平台JVM实现不同,但都能正确解释执行相同的字节码

五、进程管理

0. 先描述,再组织

1)描述:通过结构体/类,把进程的各种属性表示出来。

  • 主流系统用 C/C++ 实现,广泛用到结构体 struct

2)组织:通过数据结构,把多个结构体串联起来,并进行增删改查。

  • 简单认为,通过链表的方式将多个 PCB(进程控制块)串联到一起。
  • 创建进程(如双击 exe 运行程序):相当于创建一个 PCB 结构体,并插入链表。
  • 销毁进程:从链表删除 PCB,并释放结构体。
  • 查看进程列表:遍历链表并显示信息。

对于 Linux 操作系统,使用称为 “PCB” 的结构体来描述进程信息。

PCB 包含的信息
PCB(进程控制块)是一个非常复杂的结构体,包含众多属性。以下讨论关键信息:

  1. PID(进程标识符)

    • 同一时刻,一台机器上所有进程的 PID 是唯一的,不会重复。
    • 系统内部通过 PID 定位并操作特定进程。
  2. 内存指针(一组)

    • 描述进程依赖的指令和数据在内存中的具体位置。
    • 操作系统运行可执行文件(exe)时,会将其指令和数据加载到内存的特定地址。
  3. 文件描述符表(顺序表/数组)

    • 记录进程当前打开了哪些文件。
    • 当进程打开一个文件时,会在表中新增一项。
    • 体现了进程对硬盘资源的使用情况。

说明

  • 进程的执行需要内存资源(通过内存指针管理)。
  • 进程的执行也可能需要硬盘资源(通过文件描述符表管理)。

1. 进程概念

  • 静态程序:硬盘上的可执行文件(如.exe)
  • 动态进程:程序加载到内存中执行的实例

2. 进程控制块(PCB)详细结构

  1. PID:唯一进程标识符,用于系统识别和管理进程
  2. 内存指针
    • 代码段指针:指向程序指令
    • 数据段指针:指向程序数据
    • 堆栈指针:指向运行时栈
  3. 文件描述符表
    • 记录进程打开的文件和I/O设备
    • 通常实现为数组结构
  4. 进程状态
    • 就绪、运行、阻塞等状态
    • 状态转换由操作系统调度器控制
  5. 进程优先级
    • 影响调度顺序
    • 可通过nice值调整
  6. 进程上下文
    • 寄存器值(PC、SP、通用寄存器等)
    • 切换进程时需要保存和恢复
  7. 记账信息
    • CPU使用时间
    • 内存使用情况
    • I/O操作统计

3. 进程调度机制

  1. 分时复用原理
    • CPU时间划分为小的时间片(通常几毫秒)
    • 每个进程轮流获得时间片执行
  2. 并发与并行
    • 并发:宏观上同时执行(单核CPU)
    • 并行:真正同时执行(多核CPU)
  3. 上下文切换
    • 保存当前进程的寄存器状态到PCB
    • 从PCB恢复下一个进程的寄存器状态
    • 类似游戏的存档和读档

4. 进程间通信(IPC)

主要方式

  • 网络通信(socket)
  • 管道(pipe)
  • 共享内存
  • 消息队列

现在最主要的进程间通信方式有且只有一个:通过网络(socket),这个是后续重点内容。

C++ 会讲得更多一些,Java就不做过多讨论了

C++ 进行编程时高度依赖操作系统的原生 API,但对 Java 程序员来说不需要——JVM 包办一切了

六、操作系统与编程的关系

  1. 系统编程
    • C/C++直接调用系统API
    • 需要深入理解操作系统原理
  2. 高级语言开发
    • Java等语言通过虚拟机抽象系统细节
    • 开发者更关注业务逻辑实现
http://www.dtcms.com/a/308777.html

相关文章:

  • Spring Boot Admin 监控模块笔记-实现全链路追踪
  • 另外几种语言挑战100万行字符串文本排序
  • Web开发-PHP应用原生语法全局变量数据接受身份验证变量覆盖任意上传(代码审计案例)
  • 风力发电场景下设备状态监测与智能润滑预测性维护策略
  • 【Python气象可视化】用Cartopy+Matplotlib绘制青藏高原涡移动轨迹图(附完整代码+颜色渐变时间轴)
  • 数据库学习--------数据库日志类型及其与事务特性的关系
  • 题目:BUUCTF之rip(pwn)
  • [算法]Leetcode3487
  • 【高等数学】第七章 微分方程——第五节 可降阶的高阶微分方程
  • 第三章·数据链路层
  • 前端路由深度解析:Hash 模式 vs. History 模式
  • 数字化应急预案:构筑现代安全防线
  • 实时语音流分段识别技术解析:基于WebRTC VAD的智能分割策略
  • MySQL 中的事务隔离级别有哪些?分别解决什么问题?
  • 图结构知识构造方法详解 ——面向垂直领域的高效知识库构建方案
  • CentOS 7 编译 Redis 6.x 完整教程(解决 GCC 版本不支持 C11)
  • lesson29:Python元类与抽象类深度解析:从接口定义到元编程实践
  • mysql 日志机制
  • Java 接口(上)
  • 哈希相关的模拟实现
  • 04百融云策略引擎项目laravel实战步完整安装composer及tcpdf依赖库和验证-优雅草卓伊凡
  • 常用的ROS(Robot Operating System,机器人操作系统)包,用于机器人软件开发的工具和库
  • isasssim robotiq夹爪踩坑
  • 同个主机拉取不同权限仓库的方法
  • 疯狂星期四文案网第25天运营日记
  • Product Hunt 每日热榜 | 2025-07-31
  • 零信任网络概念及在网络安全中的应用
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 80(题目+回答)
  • 高等教育领域:依托VR教育服务,推动科研与教学的创新性发展
  • 智慧安防徘徊识别误报率↓77%:陌讯时序 - 空间融合算法实战解析