计算机系统漫游

字符命令存储过程

IO设备

每个I/O设备都通过一个控制器或适配器与I/O总线相连。适配器和控制器的功能都是在I/O设备和I/O总线之间传递信息。
在这里插入图片描述
我们在键盘输入信息,在我们输入完信息,按下enter键时,信息会经总线被存储到磁盘中。

总线

贯穿整个系统的是一组电子管道,称作总线,它携带信息字节并负责在各个部件间传递。通常总线被设计成传送定长的字节块,也就是字。字中的字节数(即字长)是一个最基本的系统参数。大多数机器字长要么是4字节(32位),要么是8字节(64字节)。

命令行解释器

操作系统只认识的二进制源码,而使用者只认识文本文档,而shell(命令行解释器)充当了这个翻译官。shell输出一个提示字符,等待输入一个命令行,然后执行这个命令。如果该命令的第一个单词不是内置的shell命令,那么shell就会假设这是一个可执行文件的名字,它会将hello目标文件中的代码和数据从磁盘复制到主存

shell的命令行解释器功能:接受用户键入的命令,进行分析,创建子程序,由子程序实现命令所规定的功能,等子程序执行完之后,发出提示符。

编译

#include<stdio.h>

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

这里写图片描述
这是众所周知的hello,world,今天我认识到了打印hello,world也是一件十分复杂的过程:由程序员编写的文本文件hello.c开始,经历预处理、编译、汇编、链接,其中需要计算机系统输入设备、输出设备、CPU、内存控制器、总线、缓存、寄存器等硬件设备的支持与合作,还需要操作系统以及系统工具等软件资源的协调与管理。

下图显示四步分解过程编译结果,而通常情况下,我们直接gcc hello.c就是把这四步一气呵成,生成了默认名为a.out的可执行程序。
这里写图片描述

预处理
  1. 展开头文件
  2. 宏替换
  3. 条件编译
  4. 去注释
编译

检查语法错误------>生成汇编代码

汇编

汇编码------>机器码(0、1组成的二进制序列,即源码)

链接

动态链接

当程序运行到属于某个动态库libtest.so的某个函数func的时候,程序含有函数的入口地址,而被链接的动态库会被拷贝到虚拟内存的共享区,被所有需要该库的程序共用。 一份动态库可以被用到该库的所有进程共用,外部函数的机器码由操作系统从磁盘上复制到内存(虚拟内存的共享区)中的过程叫做动态链接。
动态库:是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源。
这里写图片描述

静态链接

静态链接是由链接器在链接时将库的内容加入到可执行程序中的做法。 静态链接的最大缺点是生成的可执行文件太大,需要更多的系统资源,在装入内存时也会消耗更多的时间。

执行环境

加载

处理器的核心是一个大小为一个字的存储设备(寄存器),称为程序计数器(PC)。在任何时候PC都要指向主存中的某条机器语言指令(即存储了该指令的地址)。从通电开始,处理器一直不断地执行程序计数器指向的指令。从主存中复制一个字节或一个字到寄存器,以覆盖原来的内容的过程叫做加载。

执行

程序从main函数开始执行,这个时候程序将会使用一个运行时堆栈来存储自己的局部变量和返回地址。程序运行起来会形成至少一个进程,进程控制块是操作系统调度的调度的基本单位。
程序结束:程序执行完毕正常终止,也有可能意外终止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
深入理解计算机系统》的目录如下: 第一部分 计算机系统漫游 第 1 章 计算机系统漫游 1.1 信息就是位+上下文 1.2 程序被其他程序翻译成不同的格式 1.3 了解编译系统如何工作是大有益处的 1.4 处理器读并解释存储在内存中的指令 1.5 系统中的 I/O 操作会以编程方式访问硬件 1.6 系统之间利用网络进行通信 第二部分 程序结构与执行 第 2 章 信息的表示和处理 2.1 信息存储 2.2 整数表示 2.3 整数运算 2.4 浮点数 2.5 代码优化 第 3 章 程序的机器级表示 3.1 程序编码 3.2 访问信息 3.3 操作系统管理信息的方式 3.4 异常控制流 3.5 虚拟内存 3.6 内存管理 第三部分 系统级 I/O 第 4 章 处理器体系结构 4.1 处理器组成 4.2 指令执行和处理器性能 4.3 流水线处理器 4.4 处理器调度 4.5 多处理器系统 第 5 章 存储器层次结构 5.1 存储器技术 5.2 存储器层次结构 5.3 缓存性能优化 5.4 虚拟存储器 第 6 章 系统级 I/O 6.1 通信原理 6.2 I/O 设备 6.3 客户端-服务器模型 6.4 网络编程 6.5 并发编程 第四部分 网络编程 第 7 章 链接 7.1 静态链接 7.2 目标文件 7.3 动态链接 7.4 重定位 第 8 章 异常控制流 8.1 异常 8.2 进程 8.3 信号 8.4 异常控制流在 UNIX 系统中的实现 第 9 章 虚拟内存 9.1 地址空间 9.2 页表 9.3 页面置换算法 9.4 高级虚拟内存技术 第五部分 存储器层次结构 第 10 章 系统级 I/O 的例子:以 Linux 为例 10.1 Linux I/O 简介 10.2 操作系统支持的 I/O 设备 10.3 I/O 设备编程 10.4 总线、I/O 设备和驱动程序之间的交互 10.5 系统级 I/O 软件的架构 第 11 章 系统级 I/O 的例子:以 Windows 为例 11.1 Windows I/O 简介 11.2 操作系统支持的 I/O 设备 11.3 I/O 设备编程 11.4 总线、I/O 设备和驱动程序之间的交互 11.5 系统级 I/O 软件的架构 附录A ASCII 码表 附录B 编译器和库函数 附录C x86 指令集简介 附录D 常用的 C 库函数 附录E 无符号加法的实现 附录F 数组乘法的实现 附录G 格式化输出的实现 附录H Makefile 的基础知识和技巧 附录I 延伸阅读 附录J 题解

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值