程序运行的基础
程序语言到机器指令的过程编程
- 1.hello.c 源程序一个文本文件,通过预处理(pre-processer)成为hello.i
- 2.hello.i 修改的源程序,通过编译处理(compiler) 成为hello.s
- 3.hello.s 汇编程序,通过汇编器(assembler)成为hello.o
- 4.hello.o 一个二进制文件+printf.o 通过连接器linker成为可执行文件(executable) hello
操做系统数组
- 文件是对I/O设备的抽象
- 虚拟内存是对I/O设备和主存的抽象
提供了一个每一个进程都独自使用主存的假象.
- 进程是对处理器,主存,I/O设备的抽象
处理器在进程间切换实现交错执行的机制称为上下文切换
多线程和多进程sass
- 进程:
是并发执行的程序在执行过程当中分配和管理资源的基本单位.一个程序可能包含多个进程.
- 线程:
是进程的一个执行单元,是进程内可调度实体.比进程更小的独立运行的基本单位
- 线程能够共享资源,进程则是独立的地址空间.
一个进程崩溃后,在保护模式下不会对其余进程产生影响,可是一个线程崩溃整个进程都死掉。因此多进程要比多线程健壮。
- 进程切换时,消耗的资源大,效率高。
因此涉及到频繁的切换时,使用线程要好于进程。一样若是要求同时进行而且又要共享某些变量的并发操做,只能用线程不能用进程
机器表示和计算信息多线程
- 数据的大小(data size)
这些都是对于64-bit机器而言,64位机器
C declaration bytes
short | 2
int | 4
long | 8
char * | 8
float | 4
double | 8
程序的机器级表示并发
- the program counter called %rip
存储下一个要执行命令的地址在内存中
- integer register file:
adresses or integer data
- condition code registers :
条件代码寄存器,if and while statements
- vector register :
one or more integer or floating-point values.
- object dump:
对象转储. use objdump 能够进行disassemblers.
- 寻址的基本操做:
immediate : 当即数寻址,register 寄存器寻址, absolute :绝对寻址,indirect :间接寻址
base+diaplacement:基址加偏移量, indexed:变址寻址,scaled indexed:比例变址寻址
信息的读取:
注意区份内存地址和寄存器地址,以及他们的表达式及数据之间的移动
算术运算和逻辑运算
控制语句:
各类控制语句要尽量的了解
控制语句不要去使用goto语句,这会使程序变得很是复杂.
数组的分配和访问spa
数组的定义
数组的名称,数组元素大小,数组大小,起始地址,元素位置检索
char a[12]
int c[6]
char *d[8]操作系统
array element size total size start address element i
a 1 12 \(x_{a}\) \(x_{a}+i\)
c 4 24 \(x_{c}\) \(x_{c}+4i\)
d 8 64 \(x_{d}\) \(x_{d}+8i\)线程
多维数组(二维数组)
\(T D[R][C]\)
数组元素查找
\[ & D[i][j]=x_{D}+L(C*i+j) \]code
系统层面的输入输出对象