《深入理解计算机系统》一.计算机系统漫游

第一个程序——hello c world

1. 源文件:通过编辑器创建并保存的文本文件,hello.c。源文件由0、1组成。hello程序的生命周期从源文件开始。
2. 文件:文件分为文本文件和二进制文件。
文本文件:文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等。像hello.c就是用的ASCII编码,是文本文件。
二进制文件:二进制文件是基于值编码的文件,可以根据具体应用,指定某个值是什么意思 。
区别:文本文件的编码基于字符定长,译码相对要容易一些;二进制文件编码是变长的,灵活利用率要高,而译码要难一些,不同的二进制文件译码方式是不同的。
3. 编译系统转载于:https://www.cnblogs.com/crb912/p/9712229.html
1>预处理阶段:根据#开头的命令,修改C程序。读取系统头文件的内容,然后插入到文本文件中得到以.i为文件拓展名的文件(hello.i),可以理解为补充,例如#include<stdio.h>在.c中是个“标识”,通过预处理把真正的stdio.h的内容搬过来。
2> 编译阶段:把hello.i文件翻译成文本文件hello.s。作用就是为不同高级语言的不同编译器提供一个通用的输出。
3>汇编阶段: 把hello.s翻译成机器语言指令,这些机器指令打包成可重定向目标程序的格式,并将结果保存到hello.o的文件中。(hello.o为二进制文件)
4>链接阶段:比如,hello.c调用了printf函数,这个函数有自己的一个预编译好了的目标文件printf.o,此时链接阶段就是把printf.o合并到hello.o中得到hello问价,这是一个可执行目标文件,可以加载到内存被系统执行。

补充:GNU与GCC
GNU:商业化的UNIX系统都包含提供系统服务和工具的应用程序,而对于Linux系统来说,这些额外的程序是由许多程序员编写并自由发布的。
GNU是一个自由的操作系统,因为GNU的设计类似Unix,但它不包含具著作权的Unix代码,作为操作系统,GNU的发展仍未完成,其中最大的问题是具有完备功能的内核尚未被开发成功。GNU的内核,称为Hurd,
是自由软件基金会发展的重点,但是其发展尚未成熟。在实际使用上,多半使用Linux内核、FreeBSD等替代方案,

说白了:GNU与LINUX一样都是类Unix系统但GNU内核不完善,所以内核通常用Linux,而GNU又提供了许多系统服务和工具的应用系统

计算机系统的硬件组成

1. 总线
贯穿整个系统的一组电子管道。携带信息字节并负责在各个部件之间传递。
2. IO设备
负责系统与外界之间的沟通。每个IO设备都通过一个控制器或适配器与IO总线相连。比如磁盘、显示器等都是IO设备。
3. 主存
主存是一个临时存储设备。
内存与主存:.内存与主存:在80386以上的微机中包含了高速缓冲存储器(cache),此时内存就包括主存和高速缓冲存储器两部分主存就是计算机内存条,采用的是DRAM(动态随机存储器),我们常说的内存大小就指内存条容量。 cache采用的是SRAM(静态随机存储器),速度接近CPU快于DRAM,容量小于DRAM,优先级高于DRAMCPU读取信息先看cache再看DRAM。
4. 处理器
处理存储在主存中的指令的机器。其核心为PC,CPU内部有寄存器文件、ALU、PC。寄存器文件是一个很小的存储设备,由一些单个字长的寄存器组成。

存储设备

1. 存储器的层次结构:
L0:寄存器
L1:SRAM
L2:主存
L3:本地磁盘
L4:分布式文件系统、web服务器等
越往上速度越快、同等容量下造价越高。

操作系统管理硬件

1. 操作系统的功能
1>防止硬件被应用程序滥用
2>为应用程序提供简单一致的机制去控制硬件
2. 关于操作系统的几个抽象
1>文件是对IO设备的抽象表示
2>虚拟内存是对主存和磁盘IO设备的抽象表示
3>进程是对处理器、主存和io设备的抽象表示
3. 进程、线程
进程:是操作系统对一个正在运行的程序的一个抽象
上下文:操作系统保持跟踪进程运行所需要的所有状态信息
上下文切换:操作系统把控制权从一个进程转移到另一个进程
内核:是系统管理全部进程所用的代码和数据结构的集合
线程:是进程中的一个执行单位。一个进程可以由许多个线程组成。每个线程都运行在进程的上下文中,并共享全部的代码和全局数据。
4. 虚拟内存
虚拟内存是对主存和磁盘IO设备的抽象表示,它为进程提供了一个假象,即每个进程都在独立地使用主存。虚拟地址空间:使个进程看到的内存都是一样。
个人理解:虚拟内存就是一种内存管理机制。虚拟内存空间则是让每个进程看到的将是地址从0000开始的整个内存空间。
5. 文件
文件就是字节序列。把所有的IO都看成文件,因此文件向应用程序提供了一个统一的视图。
6. 并发、并行
并发:一个对象处理多个项目(交替)
并行:多个对象处理多个项目(同时)

网络通信

1.系统之间利用网络通信

猜你喜欢

转载自blog.csdn.net/weixin_45884870/article/details/103092065