01计算机系统漫游

信息

系统中所有的信息——包括磁盘文件、存储器中的程序、存储器中存放的用户数据以及网络上传送的数据,都是由一串表示的

区分不同数据对象的唯一方法是我们都到这些数据对象时的上下文

信息就是位加上下文


编译系统

编译系统

unix> gcc -o hello hello.c
  • 预处理阶段

    预处理器(cpp)根据以#开头的命令,修改原始C程序,将头文件内容直接插入到程序文本中,得到另外一个C程序,通常以.i作为文件扩展名

  • 编译阶段

    编译器(ccl)将文本文件hello.i翻译成文本文件hello.s,包含一个汇编语言程序。汇编语言程序中的每条语句都以一种标准的文本格式确切地描述了一条低级机器语言指令

  • 汇编阶段

    汇编器(as)将hello.s翻译成机器语言指令,把这些指令打包成一种叫做可重定位目标程序的格式,并将结果保存在目标文件hello.o

  • 链接阶段

    hello程序调用了printf函数,printf函数存在于一个名为printf.o的单独预编译好了的目标文件中,而这个文件必须以某种方式合并到我们的hello.o程序中,链接器(ld)就负责处理这种合并

系统硬件组成

  • 总线

    贯穿整个系统的一组电子管道叫做总线,携带信息字节并负责在各个部件间传递

    通常总线被设计成传送定长的字节块,也就是字(word)

  • I/O设备

    I/O设备时系统与外部世界联系的通道

    包括作为用户输入的键盘和鼠标、作为用户输出的显示器、用于长期存储数据和程序的磁盘驱动器

    每个I/O通过一个控制器或者适配器与I/O总线相连。控制器是置于I/O设备本身的活着系统的主印制电路板(主板)上的芯片组;适配器是一块插在主板插槽上的卡。

  • 主存

    主存是临时存储设备,在处理器执行郑旭时,用来存放程序和程序处理的数据

    从物理上说,主存是一组动态随机存取存储器(DRAM)芯片组成

    从逻辑上说,存储器是一个线性的字节数组,每个字节都有其为一个地址(数组索引),地址从零开始

  • 处理器

    中央处理单元(CPU),简称处理器,是解释(执行)存储在主存中指令的引擎

    处理器的核心是一个字长的存储设备(寄存器),作为程序计数器(PC),在任何时刻,PC都指向主存中的某条机器语言指令

    寄存器文件是一个小的存储设备,由一些1字长的寄存器组成

    算术/逻辑单元(ALU)计算新的数据和地址值


指令集结构和微体系结构

  • 指令集结构

    描述的是每条机器代码指令的效果

  • 微体系结构

    描述的是处理器实际上是如何实现的


存储器层次结构

层次结构

从上至下,设备变得访问速度越来越慢、容量越来越大,每字节的造价也越来越便宜

存储器层次结构

主要思想

一层上的存储器作为低一层存储器的高速缓存。因此,寄存器文件就是L1的高速缓存,L1是L2的高速缓存,L2是L3的高速缓存,L3是主存的高速缓存,主存是磁盘的高速缓存


操作系统的功能

两大基本功能

  • 防止硬件被失控的应用程序滥用
  • 向应用程序提供简单一直的机制来控制复杂而又通畅大相径庭的低级硬件设备

抽象

操作系统通过抽象概念(进程、虚拟存储器、文件)来实现这两个功能

  • 进程是对处理器、主存、I/O设备的抽象表示
  • 虚拟存储器是对主存、I/O设备的抽象表示
  • 文件是对I/O设备的抽象表示

{{I/O进程{处理器虚拟存储器{主存文件{I/O设备

进程

在一个系统上可以同时运行多个进程,而每个进程都好像在独占地使用硬件

并发运行是说一个进程的指令和另一个的指令是交错之行的

大多数系统中,需要运行的进程数是多于可以运行它们的CPU个数的

无论是单核还是多核系统中,一个CPU看上去都像是在并发地之行多个进程,这是通过处理器在进程间切换来实现的,操作系统实现这种交错执行的机制称为上下文切换

操作系统保持跟踪进程运行所需的所有状态信息,叫做上下文,包括许多信息,例如PC和寄存器文件的当前值,以及主存的内容。

当操作系统决定要把控制权从当前进程转移到某个新的进程时,就会进行上下文切换,即保存当前进程的上下文、恢复新进程的上下文,然后将控制权传递到新的进程,新进程就会从上次停止的地方开始

实现进程这个抽象的概念需要低级硬件和操作系统软件之间的紧密合作

线程

一个进程实际上可以由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,贡献同样的代码和全局数据

虚拟存储器

虚拟存储器为每个进程提供了一个假象,即每个进程都在独占地使用主存。每个进程看到的是一致的存储器,称为虚拟地址空间

虚拟地址空间

  • 内核虚拟存储器

    内核总是主流在内存中,是操作系统的一部分,地址空间顶部的区域是为内核保留的,不允许应用程序读写这个区域的内容或者直接调用内核代码定义的函数

  • 编译器使用栈来实现函数调用

    用户栈在程序执行期间可以动态地扩展和收缩

  • 共享库

    大约在地址空间的中间部分是一块用来存放像C标准库和数学库这样共享库的代码和数据的区域

  • 当调用乳malloc和free这样标准C库函数时,堆可以在运行时动态地扩展和收缩

  • 程序代码和数据

    对所有进程来说,代码是从同一固定地址开始,紧接着的是和C全局变量相对应的数据位置

    代码和数据区是可以直接按照可执行目标文件的内容初始化的

文件

文件就是字节序列

每个I/O设备都可以视为文件,系统中所有输入输出都是通过使用一小组称为Unix I/O的系统函数调用读写文件实现的


并行和并发

两个需求:计算机做的更多,运行的更快

  • 并发

    一个同时具有多个活动的系统

  • 并行

    使一个系统运行得更快

线程级并发

单处理器系统多处理器系统

超线程是一项允许一个CPU执行多个控制流得技术。涉及CPU某些硬件有多个备份,比如PC和寄存器文件,而其它硬件部分只有一份。超线程处理器可以在单个周期的基础上决定要执行哪一个线程

多处理器可以从两方面提高系统性能

首先减少了执行多个任务时模拟并发的需要

其次可以使应用程序运行的更快,这必须要求程序是以多线程的方式来书写的

指令级并行

在较低的抽象层次上,现代处理器可以同时执行多条指令的属性称为指令级并行

使用流水线超标量来实现

单指令、多数据并行

在最低层次上,许多现代处理器有特殊的硬件,允许一跳指令产生多个可以并行执行的操作,称为单指令、多数据(SIMD)并行

采用PyQt5框架与Python编程语言构建图书信息管理平台 本项目基于Python编程环境,结合PyQt5图形界面开发库,设计实现了一套完整的图书信息管理解决方案。该系统主要面向图书馆、书店等机构的日常运营需求,通过模块化设计实现了图书信息的标准化管理流程。 系统架构采用典型的三层设计模式,包含数据存储层、业务逻辑层和用户界面层。数据持久化方案支持SQLite轻量级数据库与MySQL企业级数据库的双重配置选项,通过统一的数据库操作接口实现数据存取隔离。在数据建模方面,设计了包含图书基本信息、读者档案、借阅记录等核心数据实体,各实体间通过主外键约束建立关联关系。 核心功能模块包含六大子系统: 1. 图书编目管理:支持国际标准书号、中国图书馆分类法等专业元数据的规范化著录,提供批量导入与单条录入两种数据采集方式 2. 库存动态监控:实时追踪在架数量、借出状态、预约队列等流通指标,设置库存预警阈值自动提醒补货 3. 读者服务管理:建立完整的读者信用评价体系,记录借阅历史与违规行为,实施差异化借阅权限管理 4. 流通业务处理:涵盖借书登记、归还处理、续借申请、逾期计算等标准业务流程,支持射频识别技术设备集成 5. 统计报表生成:按日/月/年周期自动生成流通统计、热门图书排行、读者活跃度等多维度分析图表 6. 系统维护配置:提供用户权限分级管理、数据备份恢复、操作日志审计等管理功能 在技术实现层面,界面设计遵循Material Design设计规范,采用QSS样式表实现视觉定制化。通过信号槽机制实现前后端数据双向绑定,运用多线程处理技术保障界面响应流畅度。数据验证机制包含前端格式校验与后端业务规则双重保障,关键操作均设有二次确认流程。 该系统适用于中小型图书管理场景,通过可扩展的插件架构支持功能模块的灵活组合。开发过程中特别注重代码的可维护性,采用面向对象编程范式实现高内聚低耦合的组件设计,为后续功能迭代奠定技术基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
### LAB1 计算机系统漫游教程介绍 #### 一、实验目的 通过完成LAB1计算机系统漫游,学习者能够深入了解计算机系统的各个组成部分及其工作原理。这不仅有助于提高编程能力,还能增强对底层硬件的理解[^1]。 #### 二、环境搭建 为了顺利开展本实验室项目,需要准备如下软件工具: - 安装有Linux操作系统的虚拟机或实体机; - GCC编译器用于编写C/C++程序; - GDB调试器帮助分析代码执行过程中的问题; 对于具体的安装方法可以参照官方文档或其他在线资源获取更多信息[^2]。 #### 三、核心知识点讲解 ##### (一)汇编语言基础 掌握基本的x86指令集架构,熟悉如何查看并解释由高级语言转换而来的机器码形式。这部分内容通常会涉及到寄存器的操作以及内存寻址方式等概念。 ##### (二)链接与加载机制 理解目标文件格式(ELF),学会利用`objdump`, `readelf`命令来解析可执行文件内部结构;同时也要知道动态库静态库的区别及应用场景。 ##### (三)I/O子系统探究 探索标准输入输出函数背后隐藏的秘密——缓冲区管理策略、终端设备驱动模型等内容,在此基础上尝试实现简单的字符设备读写功能。 #### 四、实践案例分享 以一个具体的小型工程项目为例,如编写一段计算斐波那契数列前N项值的多线程版本程序,并对其进行性能优化测试。此过程中需综合运用上述所学理论知识解决实际遇到的各种挑战。 ```cpp #include <iostream> #include <thread> void print_fibonacci(int n){ int a = 0, b = 1; std::cout << "Fibonacci sequence up to " << n << ": "; while (a <= n) { std::cout << a << ' '; int next = a + b; a = b; b = next; } } int main(){ const int num_threads = 5; // 创建五个线程分别打印不同范围内的斐波那契序列 std::thread threads[num_threads]; for(size_t i=0;i<num_threads;++i){ threads[i]=std::thread(print_fibonacci,i*10); } for(auto& th : threads){ if(th.joinable()){ th.join(); } } return 0; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值