深入理解计算机系统阅读笔记-第一章

第一章 计算机系统漫游

所有计算机系统都是由硬件和系统软件组成。

以hello.c的生命周期为例学习系统知识

#include <stdio.h>

int main()
{
    printf("Hello world!");
    return 0;
}

1.1 信息就是位+上下文

源文件在系统中实际是由0和1组成的位(bit)序列,8位组成一个字节(byte),每个字节代表一个字符。大部分现代系统使用ASCII码表,注意大小写字符的ASCII是不同的。

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

在不同的上下文中,同样的bit序列表示的意义可能不同,比如整型、字符串;

ASCII码一览表,ASCII码对照表_54笨鸟 (54benniao.com)

二进制十进制十六进制字符/缩写解释
00000000000NUL (NULL)空字符
00000001101SOH (Start Of Headling)标题开始
00000010202STX (Start Of Text)正文开始
00000011303ETX (End Of Text)正文结束
00000100404EOT (End Of Transmission)传输结束
00000101505ENQ (Enquiry)请求
00000110606ACK (Acknowledge)回应/响应/收到通知
00000111707BEL (Bell)响铃
00001000808BS (Backspace)退格
00001001909HT (Horizontal Tab)水平制表符
00001010100ALF/NL(Line Feed/New Line)换行键
00001011110BVT (Vertical Tab)垂直制表符
00001100120CFF/NP (Form Feed/New Page)换页键
00001101130DCR (Carriage Return)回车键
00001110140ESO (Shift Out)不用切换
00001111150FSI (Shift In)启用切换
000100001610DLE (Data Link Escape)数据链路转义
000100011711DC1/XON
(Device Control 1/Transmission On)
设备控制1/传输开始
000100101812DC2 (Device Control 2)设备控制2
000100111913DC3/XOFF
(Device Control 3/Transmission Off)
设备控制3/传输中断
000101002014DC4 (Device Control 4)设备控制4
000101012115NAK (Negative Acknowledge)无响应/非正常响应/拒绝接收
000101102216SYN (Synchronous Idle)同步空闲
000101112317ETB (End of Transmission Block)传输块结束/块传输终止
000110002418CAN (Cancel)取消
000110012519EM (End of Medium)已到介质末端/介质存储已满/介质中断
00011010261ASUB (Substitute)替补/替换
00011011271BESC (Escape)逃离/取消
00011100281CFS (File Separator)文件分割符
00011101291DGS (Group Separator)组分隔符/分组符
00011110301ERS (Record Separator)记录分离符
00011111311FUS (Unit Separator)单元分隔符
001000003220(Space)空格
001000013321!
001000103422"
001000113523#
001001003624$
001001013725%
001001103826&
001001113927'
001010004028(
001010014129)
00101010422A*
00101011432B+
00101100442C,
00101101452D-
00101110462E.
00101111472F/
0011000048300
0011000149311
0011001050322
0011001151333
0011010052344
0011010153355
0011011054366
0011011155377
0011100056388
0011100157399
00111010583A:
00111011593B;
00111100603C<
00111101613D=
00111110623E>
00111111633F?
010000006440@
010000016541A
010000106642B
010000116743C
010001006844D
010001016945E
010001107046F
010001117147G
010010007248H
010010017349I
01001010744AJ
01001011754BK
01001100764CL
01001101774DM
01001110784EN
01001111794FO
010100008050P
010100018151Q
010100108252R
010100118353S
010101008454T
010101018555U
010101108656V
010101118757W
010110008858X
010110018959Y
01011010905AZ
01011011915B[
01011100925C\
01011101935D]
01011110945E^
01011111955F_
011000009660`
011000019761a
011000109862b
011000119963c
0110010010064d
0110010110165e
0110011010266f
0110011110367g
0110100010468h
0110100110569i
011010101066Aj
011010111076Bk
011011001086Cl
011011011096Dm
011011101106En
011011111116Fo
0111000011270p
0111000111371q
0111001011472r
0111001111573s
0111010011674t
0111010111775u
0111011011876v
0111011111977w
0111100012078x
0111100112179y
011110101227Az
011110111237B{
011111001247C|
011111011257D}
011111101267E~
011111111277FDEL (Delete)删除

1.2 程序被其它程序翻译成不同的格式 

c程序到可执行程序是由编译器驱动(compiler driver)实现的,要经历四个阶段

预处理:预处理器(cpp)根据#开头的命令进行展开,生成hello.i

编译:编译器(ccl)将hello.i翻译成汇编程序hello.S

汇编:汇编器(as)将hello.S翻译成机器语言指令把这些指令打包成可重定位(relocatable)目标程序的格式,并将结果保存在hello.o中。他是机器语言的二进制文件,用文本打开是乱码。

链接:所有程序都会使用库函数,比如hello.c中的printf,链接器(ld)负责把他们合并到我们的程序中,并生成可执行目标文件hello。

1.3 了解编译系统如何工作是大有益处的

优化程序性能

理解链接时出现的错误

避免安全漏洞

1.4 处理器读并解释存储在存储器中的指令

hello.c被编译成只可行程序hello存储在磁盘中,需要在shell应用程序中执行,shell是一种命令行解释器。

1.4.1 系统的硬件组成

总线:负责数据传输,通常被设计成定长的字节块,也就是字(word),字中的字节数叫字长,不同的系统字长不同,常见的有1、2、4、8等。

I\O设备:是系统与外界联系的通道,如上图中的鼠标,键盘,显示器,磁盘等。每个I\O设备都是通过一个控制器或适配器与I\O总线连接。

主存:是临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。物理上由DRAM芯片组成,逻辑上是线性字节数组组成,每个字节有自己唯一的地址,从0开始。

处理器:中央处理单元(CPU),有程序计数器PC、算术逻辑运算单元ALU和寄存器组成。负责解释执行程序。工作流程:从PC指向的内存读取指令,执行对应的操作,更新PC指向下一条指令。

1.4.2 执行hello程序

1. 当在shell输入./hello 时,shell程序逐一读取字符到CPU寄存器,再把它送到内存中。

2. 当按下回车时,shell知道我们已经结束命令输入,然后把hello目标文件中的代码和数据从磁盘拷贝到主存。

3. 处理器执行hello中的机器语言指令,将"hello,world!\n"从主存拷贝到寄存器,在从寄存器拷贝到显示设备。

1.5 高速缓存

为解决处理器和主存之间速度差异,设计了高速缓存(cache),用于存放处理器马上可能会用的信息。它的速度比主存快,L1缓存几乎和cpu一样快,L2比L1慢5倍,但仍然比主存快5到10倍,物理上通过SRAM实现。

1.6 形成层次结构的存储设备

主存可以称为磁盘的高速缓存,L2可以称为主存的高速缓存,L1可以称为L2的高速缓存

1.7 操作系统管理硬件

应用程序不可以直接访问硬件,需要经过操作系统

操作系统的两个基本功能:

1. 防止硬件被恶意的,失控的、不安全的应用滥用

2. 屏蔽底层硬件差异,为应用提供统一的接口。

操作系统通过进程、虚拟存储器和文件三个抽象的概念实现上述两个功能

文件是对I\O设备的抽象

虚拟存储器是对主存+I\O设备的抽象

进程是对处理器+主存+I\O设备的抽象

1.7.1 进程

进程是操作系统对运行程序的抽象。每个进程都认为自己独享硬件资源。操作系统可以同时运行多个进程,宏观上是并行,但微观上是串行的(多核架构可以并行),一个进程的指令和另一个进程的指令是交错进行的,操作系统实现这种交错执行的机制叫做上下文切换。

进程运行所需要的所有状态称为上下文,如PC和寄存器的当前值,主存的内容等。

1.7.2 线程

进程可以由多个称作线程的执行单元组成,每个线程都运行在进程的上下文中,共享同样的代码和全局数据。

1.7.3 虚拟存储器

虚拟存储器是一个抽象概念,它为每个进程提供一个假象,好像每个进程都在独占主存。每个进程看到的存储器都是一致的,称为虚拟地址空间。最上面的1/4留个操作系统,剩下的给应用程序。

1.7.4 文件

所见皆文件,屏蔽底层差异,通过标准系统函数调用访问。

1.8 利用网络系统和其他系统通信

通过telnet在远程主机运行hello流程

1.9 下一步

1.10 小结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值