软件工程实践 Blog 1

软件工程实践 Blog1

2021SC@SDUSC


学习模块:计算机系统 —— 笔记 01
主要内容:储备系统原理的知识,自底向上的学习路线


001 程序的编译过程

以 gcc 编译 Hello, world 为例
在这里插入图片描述

对于上面的编译过程,也可以分步手动执行

// 预处理:加入头文件,替换宏
gcc HelloWorld.c -E -o HelloWorld.i
// 编译:包含预处理,将 C 程序转换为汇编程序
gcc HelloWorld.c -S -c -o HelloWorld.s
// 汇编:包含预处理和编译,将汇编转换为可链接的二进制程序
gcc HelloWorld.c -c -o HelloWorld.o
// 链接:包含以上所有操作,将可链接的二进制程序和其他库链接在一起,形成可执行的程序文件
gcc HelloWorld.c -o HelloWorld
CSAPP  1.2 节 
    hello.c --- cpp ---> hello.i --- ccl (编译器) ---> hello.s --- as(汇编器) 
    ---> hello.o (从文本变为二进制文件) --- id(链接器) , 同时加入其他库文件 
    ---> ./hello (生成可执行文件)  
详细 链接 的原理部分在 本书 第七章 链接,主要介绍不同文件之间的连接技术 

002 程序装载执行

图灵机模型:图灵机是一个抽象的模型,它是这样的:有一条无限长的纸带,纸带上有无限个小格子,小格子中写有相关的信息,纸带上有一个读头,读头能根据纸带小格子里的信息做相关的操作并能来回移动。
图灵机模型1+1=2 的计算例子表示:
图灵机实际例子

一篇介绍图灵机的文章:https://zhuanlan.zhihu.com/p/125645744

图灵机终归知识理想模型,而后冯·诺伊曼就提出了电子计算机使用二进制数制系统和储存程序,并按照程序顺序执行的冯诺依曼体系结构。

冯诺依曼体系结构提出的几个要求

  • 可以把程序和数据装入到计算机中
  • 必须具有长期存储程序、数据的中间结果及最终运算结果
  • 完成各种算术、逻辑运算和数据传送等数据加工处理
  • 根据需要控制程序走向,并能根据指令控制机器的各部件协调操作
  • 能够按照要求将处理的数据结果显示给用户

相应的形成了体系结构的中的五大部件:

  • 装载数据和程序的输入设备
  • 记住程序和数据的存储器
  • 完成数据加工处理的运算器
  • 控制程序执行的控制器
  • 显示处理结果的输出设备

依据上述的构想,只需要将图灵机模型中的几个部件置换成电子设备,就可以构成一台最小单元的电子计算机。

图灵机到冯诺依曼结构的转换
而后尝试使用上述模型解读 hello.s 的汇编代码
在这里插入图片描述
以上图中,分成四列:第一列为地址;第二列为十六进制,表示真正装入机器中的代码数据;第三列是对应的汇编代码;第四列是相关代码的注释。这是 x86_64 体系的代码,由此可以看出 x86 CPU 是变长指令集。

两种模型的对应

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值