深入理解计算机系统读书笔记一 ---> 计算机基础漫游

一、程序编译的不同阶段。

  通常我们是以高级程序开发易于阅读的代码,我们通过语法规则推断代码的具体含义。但是计算机执行代码的时候就需要把代码解析成既定的可执行问题,计算机是如何处理的呢?这里以C语言hello.c文件为例来说明中间过程。

#include <stdio.h>

int main()
{
printf("hello world!\n");
}

先上张图。

C语言源程序----预处理解析头文件和函数  --- 编译器解析成汇编语言 ---   翻译机器语言指令,打包目标程序 ----
链接ld合并.o文件,得到可执行文件

注意:

1、源程序是ASCII编码的文本文件,文本文件的含义是通过上下文解析的。

2、相同的高级语言源程序会通过不同的编译器解析成不同的汇编语言,也就意味着相同的源文件可以有不同的执行结果。

3、链接阶段是把所有相关的.o合并成可执行文件(包括头文件包含)。

二、系统硬件组成

hello程序的运行过程:

控制台输入./hello , shell(命令行解释器)将程序读入寄存 ---- 寄存器把程序(代码和数据)存放在主存  ---
CPU执行程序

  --- 寄存器执行主存程序读取数据 ---- 寄存器把结果复制到在显示设备

三、存储器组成

四、操作系统

操作系统提供应用程序和底层硬件的借口适配。

1、防止底层硬件被上层APP滥用。

2、为APP提供简单一致的机制来控制底层硬件。

操作系统提供的几个概念(进程,文件,虚拟存储器)

1)进程  ---- 操作系统对正在执行程序的抽象, 也可以说是正在执行的程序

  进程上下文  --- 保存进程执行的所有状态信息,寄存器值和内存内容。

  上下文切换  ---- 操作系统把控制权从当前进程转移到新进程。

  多进程 --- 操作系统正在执行多个进程,单操作系统当前只有一个进程在执行,多进程是在交替的执行不同的进程来实现。

  

  线程--- 进程的执行单元(运行在进程的上下文中,共享进程的全局数据和代码)

 2)虚拟存储器  --- 进程独立的存储空间

  

  3)文件 --字节序列,linux一切设备皆文件(键盘、显示器、磁盘、网络)

未完待续,留待学习补充:

。。。。。。。。

深入理解计算机系统读书笔记一 ---> 计算机基础漫游,布布扣,bubuko.com

时间: 2024-12-05 04:11:27

深入理解计算机系统读书笔记一 ---> 计算机基础漫游的相关文章

深入理解计算机系统读书笔记之第一章:漫游

我是从豆瓣上看到好多人都在推荐这本书,于是就去借来读一读,昨天晚上用了好长时间来读这本书的第一章节,感觉这本书比较符合我(有些基础还不太明白,这本书详细的进行了讲解,很好). 下面写一下我的理解(顺便回顾一下知识) 第一节主要讲的是: A Tour of Computer Systems 以hello.c为例进行讲解,介绍这个程序如何从一个源程序变成可执行程序,再到执行,显示屏上出现“hello,world” ···········································

深入理解计算机系统-读书笔记

第一章:计算机系统漫游 编译过程: 预处理阶段:预处理器根据字符#开头的命令,修改原始的c程序: 编译阶段:编译器将ascii文本文件翻译成汇编语言程序: 汇编阶段:汇编器将汇编语言程序翻译成机器指令,分为32位和64位系统机器语言指令,将这些指令打包成可重定位目标程序: 连接阶段:将一些所需的单独编译好的目标文件合并到可重定位目标程序中,得到一个可执行目标文件. 总线:贯穿整个系统的一组电子管道,携带信息字节并负责在各个部件间传递,通常总线被设计成传送特定长的字节块,就是字,字中的字节数(字长

深入理解计算机系统读书笔记之第二章信息的表示和处理

这一章读完,嗯,感觉怎么说呢? 就是读完了而已,没有想第一章那样,有具体的一些收获什么的.可能是没有很认真的阅读.读的很匆忙,有的内容很晦涩难懂............ 不管怎样还是在写一写自己的收获吧 这一章讲的是信息的表示和处理, 信息在系统中是怎样表示的呢?就是以字节来进行存储.信息就是位+上下文(第一章里面讲的) 具体的信息是怎样表示的? 带符号整数,不带符号整数,浮点数,等等. 1位运算 移位,向右移位 x>>k 分为两种形式 (1)逻辑上,向右移位就是在左端添加k个零[an-1,a

《CLR via C#》读书笔记 之 线程基础

第二十五章 线程基础 2014-06-28 25.1 Windows为什么要支持线程 25.2 线程开销 25.3 停止疯狂 25.6 CLR线程和Windows线程 25.7 使用专用线程执行异步的计算限制操作 25.8 使用线程的理由 25.9 线程调度和优先级 25.10 前台线程和后台线程 参考 25.1 Windows为什么要支持线程 返回 Microsoft设计OS内核时,他们决定在一个进程(process)中运行应用程序的每个实例.进程不过是应用程序的一个实例要使用的资源的一个集合

Day3: Python学习笔记之计算机基础——网络片

Day3: Python学习笔记之计算机基础--网络片 什么是互联网协议以及为何要有互联网协议? ?互联网协议本质上是为了方便连接两台计算机而指定的一系列统一的标准. osi五层模型 计算机之间要实现数据传输必须要经过以下五层协议: ? 模型 ,协议 ,硬件 ? 应用层, http协议.用户自定义协议 ? 传输层, TCP/UPD协议 ,四层交换机.四层路由器 ? 网络层, IP协议, 三层交换机.路由器 ? 数据链路层, 以太网.电信号分组, 网桥.以太网交换机.网卡 ? 物理层, 传递电信号

java内存区域——深入理解JVM读书笔记

本内容由<深入理解java虚拟机>的部分读书笔记整理而成,本读者计划连载. 通过如下图和文字介绍来了解几个运行时数据区的概念. 方法区:它是各个线程共享的区域,用于内存已被VM加载的类信息.常量.静态变量.即时编译器编译的代码等数据.JVM规范对这个区域的限制很宽松,如同堆一样不需要连续的内存.可选择固定大小.可扩展的大小外,还可以选择不实现垃圾收集.因为在些区域的垃圾收集必要性不高且效果较差.如果回收也是常量池的回收和类型的卸载,但此操作异常困难.当方法区无法满足内存的分配时,抛OutOfM

【读书笔记】性能测试基础

读书笔记:<零成本实现Web性能测试>第1~3章随手记 第1章 性能测试基础 性能测试的基本流程: 1.明确性能测试需求 2.制定性能测试方案 性能测试方案应该详尽地描述如何进行性能测试,其中应该至少包括: 1)测试背景 2)测试目的 3)测试范围           4)测试进入条件           5)测试退出条件 6)测试指标要求 7)测试策略 8)测试时机 9)测试风险 10)测试资源      3.编写性能测试案例 4.执行性能测试案例 5.分析性能测试结果 6.生成性能测试报告

3.2《深入理解计算机系统》笔记(二)内存和高速缓存的原理【插图】

<深入计算机系统>笔记(一)主要是讲解程序的构成.执行和控制.接下来就是运行了.我跳过了"处理器体系结构"和"优化程序性能",这两章的笔记继续往后延迟! <深入计算机系统>的一个很大的用处是:给了我们很多定义式的解释,或者称之为科学的解释,这将成为我的理论依据:不再是网上一些自称老手的闲聊了.不愧是计算机最牛逼的大学卡内基-梅隆大学的教材. 该blog跳过第四章CPU的结构,第五章优化程序性能,也没有详细讨论高速缓存的机制. 六.存储器层次结

4.2《深入理解计算机系统》笔记(五)并发、多进程和多线程【Final】

该书中第11章是写web服务器的搭建,无奈对web还比较陌生.还没有搞明白. 这些所谓的并发,其实都是操作系统做的事情,比如,多进程是操作系统fork函数实现的.I/O多路复用需要内核挂起进程.多线程需要内核创建和挂起线程.我么只是使用以下操作系统的这项并发技术.但是我们必须处理一些存在问题. ●进程.用这种方法,每个逻辑控制流都是一个进程,由内核来调度和维护.因为进程有独立的虚拟地址空间,想要和其他流通信,控制流必须使用进程间通信(IPC). ●I/O多路复用.这种形式的并发,应用程序在一个进