Skip to content

计算机系统漫游

#信息就是位+上下文

位:计算机中存储数据的基本单位,既是0/1序列,8个为组成1个字节.

上下文: 既是信息所在的语境。

程序被其他程序翻译为不同格式

预处理阶段 -> 编译阶段 -> 汇编阶段

  1. (预处理阶段)是修改C程序(hello.c)中#开头的命令,例如#include 在预处理阶段会读取系统文头件的stdio.h的内容,将其插入到程序文本中。此阶段会得到hello.i的文本。
  2. (编译阶段)编译器将hello.i翻译为hello.s文件,它包含一个汇编语言程序(汇编语言为不同语言的不同编译器提供了通用的输出)。
  3. (汇编阶段)汇编器将hello.s文件翻译为机器语言指令,并且把这些指令打包成为一种可重定位目标程序,并且会将结果存储到二进制文件hello.o文件中
  4. (链接阶段) 程序中出现的函数(会单独存放于一个编译好的文件中),链接阶段会将需要的函数鱼hello.o合并,处理之后得到一个可执行的目标文件。

计算机硬件组成

参考:https://blog.csdn.net/lxz352907839/article/details/82422060

计算机三级缓存以及局部性原理

参考:https://zhuanlan.zhihu.com/p/363515903

一些抽象概念

进程

进程是操作系统对一个正在运行的程序的抽象,在一个系统上可以同时运送多个进程,看上去每个进程都在独立地占用硬件,实际上每个进程的指令是交错执行的。传统单核系统在一一个时刻只能执行一个程序,先进的多核处理器同时可以执行多个程序。进程是操作系统对一个正在运行的程序的抽象,在一个系统上可以同时运送多个进程,看上去每个进程都在独立地占用硬件,实际上每个进程的指令是交错执行的。传统单核系统在一一个时刻只能执行一个程序,先进的多核处理器同时可以执行多个程序。

上下文切换

操作系统保持跟踪进程所需的所有状态信息,这种状态也叫做上下文。在任何一个时刻,单核处理器只能执行一个程序的代码,切换进程就要通过切换上下文来实现。操作系统保持跟踪进程所需的所有状态信息,这种状态也叫做上下文。在任何一个时刻,单核处理器只能执行一个程序的代码,切换进程就要通过切换上下文来实现。

内核

<进程之间的转换是通过操作系统内核进行管理的,内核是 操作系统代码常驻主存的部分。当应用程序需要操作系统的某些操作时,它就执行一条特殊的系统调用指令,将控制权传递给内核。而且进程之间的转换是通过操作系统内核进行管理的,内核是操作系统代码常驻主存的部分。当应用程序需要操作系统的某些操作时,它就执行一条特殊的系统调用指令,将控制权传递给内核。

线程

一个进程可以由多个线程组成,每个线程都运行在进程的上下文中,并且共享全局的数据。多线程之间共享数据更为容易(相比多个进程),且线程的切换是同一个上下文,而多进程切换需要上下文切换,故更为耗时。

虚拟内存

虚拟内存是让进程觉得自己在独立的使用内存,虚拟内存中的地址会被映射到物理内存。 虚拟内存包含五个分区

  1. 程序代码和数据:存放代码和数据的地方,对于所有程序而言,代码是固定地址开始的,紧接着就是全局变量的位置。
  2. 堆:在运行时动态扩展和收缩
  3. 共享库: 存放c标准库和数学库等公共代码和数据的地方
  4. 栈: 位于虚拟内存地址空间顶部的是用户栈。使用栈实现函数的调用,和堆一样,栈也会在程序执行的时候动态扩展和收缩。当一个函数被调用的时候,栈会扩展,当函数被返回的时候,栈会收缩。
  5. 内核虚拟内存: 为内核保留的,不允许应用程序去读写或者直接调用,它们仅仅被内核调用。

信息存储

十六进制

寻址

在几乎所有的机器_上,多字节对象都被储存为连续的字节序列,对象的地址为所使用的字节中最小的地址。

字节顺序

一个对象的字节有两种通用的规则, 最低有效字节在前面的方式,称为小端法, 最高有效字节在前面的方式, 称为大端法。

字符串

C语言字符串被编码为一-个以null结尾的字符数组。使文本数据比二进制数据有更强的平台独立性。k以参12345"来运行例程show_ bytes,结果为31 32 33 34 35 00,00为终 止字符,在任何使用ASCII 的系统上结果都相同。 不同机器类型使用不同且不兼容的指令和编码方式,因此二进制代码是不兼容的。

布尔运算/逻辑运算

位运算

类型 释义
| 或运算
&
^ 异或
同或
>> 左移(缩小到原来的一半)
<< 右移(扩大到原来的2倍)

整数表示