Computer Systems A Programmers Perspective 日记1-system’s hardware organization and operation

学了太多杂七杂八的知识,特别是学到前端的那些各式各样的工具,总觉得很
无趣,逻辑的无限抽象,无数次的分层,已经将前端的代码推向了一个超级细
分的领域集合, 抽象到一定层次,每一个工具都是上手即用的锤子,好用无比,
但说明书复杂,而且没有好的启发性,适用的领域太小,目前不符合本人的兴
趣路线,还是回头看看操作系统的书,让心能够静下来,不用再被那些眼花缭
乱的框架牵着鼻子走。

这本深入理解计算机系统的书一直想看,但因为知道一些这方面知识,没有真
的看两眼,今天实在觉得无聊,干脆找出来,玩一下,计算机系统说起来简单,
实现起来却复杂至极,做为面向最终用户的交流媒介,操作系统必须做到连接
底层硬件与用户的所有事情,解决无限的bug,提供稳定的环境。对我来说倒
没有那么复杂,只是要用电脑写写代码,少出bug就好,重点只关心cpu、内存
与中断,这些在学汇编的时候都接触过,现在很好奇,这本书会用什么角度来
讲述这些知识。

Reading_hello_from_keyboard.png

通过这张系统的硬件组织与操作的图,我们可以了解到运行程序时发生了什么虽
然要省去很多细节,当然未来将会一点点补充这些知识,不过现在还是先着眼于
全局。

最初,shell程序正在执行一个等待输入的死循环。当我们在键盘上键入./hello时,
shell程序将每个字符读入寄存器,然后将其存储在内存中,如图所示。当我们按
下键盘上的enter键时,shell知道我们已经输入了命令。然后,shell通过执行一系
列指令来加载可执行的hello文件,这些指令将hello对象文件中的代码和数据从磁
盘复制到主内存。这些数据包括字符串hello, world\n,最终它们被打印出来。

通过DMA(direct memory access)技术将数据从硬盘直接传输到内存中,而不需要
经过cpu。

一旦hello对象文件中的代码和数据被加载到内存中,处理器就开始在hello程序的
主例程(cs:ip跳转到hello程序所在内存)中执行机器语言指令。这些指令将从内存中
复制“hello,world!”字符串的字节到寄存器中,然后再由寄存器输出到显示设备,
在屏幕上显示出来。

你可能感兴趣的:(Computer Systems A Programmers Perspective 日记1-system’s hardware organization and operation)