第一章 计算机系统漫游

系统是硬件和系统软件相互交织的集合体,必须共同协作以达到运行应用程序的最终目的

程序简介

cpp 复制代码
// hello-world.cpp
#include<stdio.h>

int main()
{
    printf("hello world\n");
    return 0;
}

源程序是由0 / 1组成的位序列,1称为1比特,8位为一字节

ASCII码表示文本字符,每个字符用唯一的单字符大小的整数值表示

  • 文本文件:只由ASCII字符构成的文件
  • 其他为二进制文件

程序生命周期

高级c程序------低级机器语言指令(打包为可执行目标程序)

bash 复制代码
# 一条龙命令
gcc hello.c -o hello
输入后缀 生成后缀 命令 类型转换
.c .i gcc -E test.c -o test.i 预处理器cpp 文本------>文本
.i .s 汇编代码 gcc -S test.i -o test.s 编译器ccl 文本------>文本
.s .o obj文件 gcc -c test.s -o test.o 汇编器as 文本------>二进制
.o 可执行目标程序 gcc test.o -o test 链接器ld 二进制------>二进制
.c 可执行目标程序 (含调试信息) 默认名a.out gcc -g test.c 生成含调试信息的可执行文件

预处理

编译

汇编

链接

GNU项目(现代开放源码运动 ---- free software)是一个免税的慈善项目,目标为开发一个完整的类Unix操作系统;GNU环境包括EMACS编辑器、GCC编译器、GDB调试器、汇编器、链接器等工具,GCC编译器发展到可以支持多种不同的语言;Linux内核由Linux项目独立发展而来

编译系统

不同C 语言 翻译为 机器语言的形式不同,优化程序性能

系统硬件组成

  • 总线 :贯穿系统的一组电子管道,传送定长的字节块(字word),字长一般为4字节32位 / 8字节64位
  • I/O设备 :系统与外部的联系通道,键盘、鼠标、显示器、用于存储的磁盘驱动器等;每个I/O设备通过控制器(主板芯片组)或适配器(插在主板插槽上的卡)I/O总线相连
  • 主存 :由一组动态随机存取存储器(DRAM)芯片组成,临时存储程序和数据的设备;类比于线性字节数组,每个字节都有唯一的索引地址(从0开始)
  • 处理器 : 中央处理单元CPU,解释存储在主存中指令的引擎;核心程序计数器PC、大小为一个字的寄存器,指向主存中下一条机器指令;CPU从PC指向的内存处读取指令,解释指令,执行操作,再更新PC,指向下一条指令

高速缓存

磁盘------主存------CPU 程序执行------显示器

读取速度:寄存器>主存>磁盘

高速缓存存储器cache memory

存放经常访问的数据,处理大部分的内存操作:用静态随机访问存储器SRAM硬件技术实现

存储器层次

操作系统

管理硬件

  • 防止硬件被失控的应用程序滥用
  • 向应用程序提供简单一致的机制来控制复杂、大不相同的低级硬件设备

提供三个基本的抽象进程、虚拟内存、文件

进程

多个指令交错执行,上下文切换=>单处理器(单核)系统;内核是系统管理全部进程所用代码和数据结构的集合

一个进程由多个线程组成,每个线程都运行在进程上下文中,共享同样的代码和全局数据=>更高效的多线程编程模型

虚拟内存

一个进程=>一个虚拟地址空间(由大量标准定义且功能不同的区构成);进程虚拟内存的内容存储在磁盘上,用主存作为磁盘的高速缓存;地址从下往上增大

堆、用户栈:动态地扩展和收缩;编译器用实现函数调用,调用=>栈增长,返回=>栈收缩

文件

字节序列;所有输入输出都通过系统函数Unix I/O调用 读写文件来实现;每个I/O设备(磁盘、键盘、显示器、网络)都可以看成文件

系统间网络通信

系统从主存复制一串字节到网络适配器,数据流经过网络到达另一台机器


Amdahl定律

加速系统某部分对整体性能的影响取决于该部分的重要性和加速程度

要想显著加速整个系统,必须提升全系统中相当大部分的速度;k取极大值(某部分性能提升极致)时,S=1/(1-a)代表部分的系统占比

并发和并行

线程级并发

单处理器系统:多个进程间快速切换=>模拟并发(耗时较多)

多处理器系统:至少含有两个处理器的计算机系统

  • 多核处理器:多个CPU(处理器/核)集成到一张集成电路芯片
  • 超线程(同时多线程):允许一个CPU执行多个控制流

指令级并行

较低的抽象层次

流水线pipelining:划分一条指令执行活动为不同的步骤,每个阶段执行一个步骤,阶段可以并行操作,用来处理不同指令的不同部分

超标量(super-scalar)处理器:执行效率 > 一个时钟周期一条指令

单指令、多数据并行

SIMD并行 单指令、多数据

最低抽象层次,处理器的特殊硬件,允许一个指令产生多个可以并发执行的操作 => 提高处理影像、声音和视频数据应用的执行速度

编译器支持的 特殊的向量数据类型 编写程序也可做到SIMD并行性

抽象

抽象概念 原型
文件 I/O设备
虚拟内存 程序存储器
进程 正在运行的程序
虚拟机 整个计算机,包括操作系统、处理器和程序
相关推荐
Brookty9 小时前
【操作系统】线程
java·linux·服务器·后端·学习·java-ee·操作系统
喧星Aries1 天前
进程调度的时机,切换与过程方式(操作系统OS)
java·服务器·前端·操作系统·进程调度
网安小白的进阶之路2 天前
A模块 系统与网络安全 第四门课 弹性交换网络-2
网络·安全·web安全·系统安全·交换机
安全系统学习2 天前
网络安全之RCE分析与利用详情
服务器·网络·安全·web安全·系统安全
黄焖鸡能干四碗2 天前
系统安全设计方案,软件系统安全设计方案
开发语言·数据库·安全·vue·系统安全
OpenAnolis小助手2 天前
Anolis OS 23 架构支持家族新成员:Anolis OS 23.3 版本及 RISC-V 预览版发布
开源·操作系统·龙蜥社区·risc-v·anolis os·龙蜥操作系统
沐森2 天前
桌面右键功能开发
前端框架·操作系统
望获linux3 天前
【Linux基础知识系列】第四十三篇 - 基础正则表达式与 grep/sed
linux·运维·服务器·开发语言·前端·操作系统·嵌入式软件
泊浮目3 天前
未来数据库硬件-计算篇
数据库·云计算·操作系统
卿着飞翔3 天前
系统架构设计师论文分享-论系统安全设计
安全·系统架构·系统安全