关于深入了解计算机系统的笔记记录

csapp

第一章神奇的helloworld


前言

计算机入门前的基础知识学习过程:
程序部分:java红宝书
数学核心部分:密码学
基础知识部分:深入了解计算机系统(csapp)


什么是计算机系统(让我们从最简单的helloworld开始吧)

1、信息就是位+上下文

万物之源:一个源程序hello.c
这个源程序每一个字节里面由一个名字叫做ASCII的字符表示而成
ASCII字符表 每一个字符下面对应一个数字
注意:这个每个字符都是以一个\n结束的 代表的值是10
文本文件:只有ASCII字符组成
其他的统称为二进制文件

源程序:由0和1组成的位(又叫做bit比特)
位跟字节关系:8个位==一个字节

由上述这些信息可以推断出:系统中的信息都是由一堆大比特组成的
区分他们很难 唯一方法是根据上下文定这个东西表示啥玩意儿
就是同样是“我是大傻逼”在不同的上下文中表示不一样的意思

2、 程序被其他程序翻译成不同形式

为了让机器能够识别并且正常运行这个费了半天劲:
敲得语言是高级语言–>低级机器语言指令–>(被按照可执行目标程序的格式打包---->二进制磁盘存放

可执行目标文件:目标程序

奇妙的编译系统Unix:

linux> gcc m-o hello hello.c

gcc编译系统读取源程序文件hello.c 编译成一个可执行目标文件hello
分四个阶段 (预处理器 编译器 汇编器 链接器---------四个构成编译系统)

预处理阶段

预处理器(cpp):根据字符#开头的命令修改原始c程序:
#include<stdio.h>这个告诉cpp 你赶紧去搜索读取系统头文件stdio.h 将他赶紧直接插入文本中---------->结果 :hello.i出来啦

编译阶段(准备第二个坑 x86汇编教材的自学笔记干就完了!第二个坑开好了)

编译器(ccl)把hello.i---->翻译成hello.s 包含了一个汇编语言程序 这个程序里面由main函数的定义等

汇编语言的作用:为不同的高级语言的不同编译器提供了通用的语言。
人话: 懒得转换 直接一种语言通用你们必须用老子的 不然 爱加载不加载

汇编阶段

汇编器(as)汇编hello.s---->翻译成机器语言让电脑工作
电脑打包 可重定位目标程序结果保存在hello.o中
hello.o 是二进制文件 (17个字节指令编码)

编译系统干嘛的有啥鸟用

  1. 优化程序性能

为了了解一些机器代码是如何将c语句转化成机器代码的方式:
如 if-else为啥比swich更高效之类的

  1. 理解链接时出现的错误
    为什么有些链接错误 到运行的时候才能发现?之类的
    第七章就可以得到答案
  2. 避免安全漏洞

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

当hello.c源程序被编译系统翻译成hello的时候 如果想Unix系统上运行
将改文件名输入到shell的程序中

linux> ./hello
hello,world
linux>

shell干嘛的:是输出一个提示符等待一个命令行 然后执行命令
规则如下:若该命令行第一个单词不是内置的shell 则shell会假设这是一个可执行文件的名字并且加载并且运行这个程序

shell—等待终止---->hello 输出 —>结束---->shell继续跳到下一个命令行

系统的硬件组成

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值