计算机系统漫游
#信息就是位+上下文
位:计算机中存储数据的基本单位,既是0/1序列,8个为组成1个字节.
上下文: 既是信息所在的语境。
程序被其他程序翻译为不同格式
预处理阶段 -> 编译阶段 -> 汇编阶段
- (预处理阶段)是修改C程序(hello.c)中#开头的命令,例如#include
在预处理阶段会读取系统文头件的stdio.h的内容,将其插入到程序文本中。此阶段会得到hello.i的文本。 - (编译阶段)编译器将hello.i翻译为hello.s文件,它包含一个汇编语言程序(汇编语言为不同语言的不同编译器提供了通用的输出)。
- (汇编阶段)汇编器将hello.s文件翻译为机器语言指令,并且把这些指令打包成为一种可重定位目标程序,并且会将结果存储到二进制文件hello.o文件中
- (链接阶段) 程序中出现的函数(会单独存放于一个编译好的文件中),链接阶段会将需要的函数鱼hello.o合并,处理之后得到一个可执行的目标文件。
计算机硬件组成
参考:https://blog.csdn.net/lxz352907839/article/details/82422060
计算机三级缓存以及局部性原理
参考:https://zhuanlan.zhihu.com/p/363515903
一些抽象概念
进程
进程是操作系统对一个正在运行的程序的抽象,在一个系统上可以同时运送多个进程,看上去每个进程都在独立地占用硬件,实际上每个进程的指令是交错执行的。传统单核系统在一一个时刻只能执行一个程序,先进的多核处理器同时可以执行多个程序。进程是操作系统对一个正在运行的程序的抽象,在一个系统上可以同时运送多个进程,看上去每个进程都在独立地占用硬件,实际上每个进程的指令是交错执行的。传统单核系统在一一个时刻只能执行一个程序,先进的多核处理器同时可以执行多个程序。
上下文切换
操作系统保持跟踪进程所需的所有状态信息,这种状态也叫做上下文。在任何一个时刻,单核处理器只能执行一个程序的代码,切换进程就要通过切换上下文来实现。操作系统保持跟踪进程所需的所有状态信息,这种状态也叫做上下文。在任何一个时刻,单核处理器只能执行一个程序的代码,切换进程就要通过切换上下文来实现。
内核
<进程之间的转换是通过操作系统内核进行管理的,内核是 操作系统代码常驻主存的部分。当应用程序需要操作系统的某些操作时,它就执行一条特殊的系统调用指令,将控制权传递给内核。而且进程之间的转换是通过操作系统内核进行管理的,内核是操作系统代码常驻主存的部分。当应用程序需要操作系统的某些操作时,它就执行一条特殊的系统调用指令,将控制权传递给内核。
线程
一个进程可以由多个线程组成,每个线程都运行在进程的上下文中,并且共享全局的数据。多线程之间共享数据更为容易(相比多个进程),且线程的切换是同一个上下文,而多进程切换需要上下文切换,故更为耗时。
虚拟内存
虚拟内存是让进程觉得自己在独立的使用内存,虚拟内存中的地址会被映射到物理内存。 虚拟内存包含五个分区
- 程序代码和数据:存放代码和数据的地方,对于所有程序而言,代码是固定地址开始的,紧接着就是全局变量的位置。
- 堆:在运行时动态扩展和收缩
- 共享库: 存放c标准库和数学库等公共代码和数据的地方
- 栈: 位于虚拟内存地址空间顶部的是用户栈。使用栈实现函数的调用,和堆一样,栈也会在程序执行的时候动态扩展和收缩。当一个函数被调用的时候,栈会扩展,当函数被返回的时候,栈会收缩。
- 内核虚拟内存: 为内核保留的,不允许应用程序去读写或者直接调用,它们仅仅被内核调用。
信息存储
十六进制
略
寻址
在几乎所有的机器_上,多字节对象都被储存为连续的字节序列,对象的地址为所使用的字节中最小的地址。
字节顺序
一个对象的字节有两种通用的规则, 最低有效字节在前面的方式,称为小端法, 最高有效字节在前面的方式, 称为大端法。
字符串
C语言字符串被编码为一-个以null结尾的字符数组。使文本数据比二进制数据有更强的平台独立性。k以参12345"来运行例程show_ bytes,结果为31 32 33 34 35 00,00为终 止字符,在任何使用ASCII 的系统上结果都相同。 不同机器类型使用不同且不兼容的指令和编码方式,因此二进制代码是不兼容的。
布尔运算/逻辑运算
略
位运算
类型 | 释义 |
---|---|
| | 或运算 |
& | 且 |
^ | 异或 |
~ | 同或 |
>> | 左移(缩小到原来的一半) |
<< | 右移(扩大到原来的2倍) |
整数表示
略