写这些东西的目的
本人虽然是计算机专业,但是读书时候对计算机系统科学并没有认真学习,工作之后才感觉到自己计算机基础知识的不扎实,虽然大家都是curd或者socket boy。但是对底层的知识如果没有一个了解,那么就不能更好的协助开发!
这个专栏是我对于操作系统的学习心得与笔记,另附上linux操作系统实现的代码
专栏分为几块
1 汇编基础知识
1.1 存储设备概述
1.1.1 内存地址编号与寻址
变量到底是个啥?
变量名和变量类型
变量名是汇编语言中的标号,标号又是啥?标号就是人性化的内存地址的表现样子,最终被编译器转换为一个物理内存地址(区别与虚拟内存地址)
变量类型是表名该变量在内存中占用的大小!
int a =4;
汇编就是
.a
db 4;
访问变量,就是通过 变量的起始地址+变量类型的大小
内存中的栈与堆
1.1.2 寄存器
1.1.2 硬盘
1.2 汇编
1.2.1 标号
1.2 实模式
实模式是个啥?
实模式下的寄存器
2.1 实模式下内存寻址/分段机制
16位8086型号的cpu的寻址
2.2 实模式下的汇编指令讲解
mov数据传输指令
movs(b/w/d/x)系列集 用于字符串在内存中的拷贝需要搭配cld与std还有rep
loop 循环指令
db dw cbw 与 cwd指令
convert byte to word
convert word to double word
cmp 比较 进行标志位的改变
cmpsb cmpsw cmpsd
j系列条件跳转指令
jmp 无条件跳转指令
运算类型汇编
add adc inc dec sub mul div idiv
位运算指令
not or and xor
call与ret
位移动指令
ror(rotate旋转 right)
rol
shr
shl
栈操作指令
push pushf/pushfd pop popf/popfd
lgdt 全局描述符设置指令
sgdt
中断指令
int3 int 中断号
into 中断溢出指令
iret
cli(clear Interrupt flag)与sti
改变flag寄存器的if标志位
hlt 处理器停止执行指令,可以通过外部中断指令来唤醒cpu
arpl调整段选择子的rpl值
1.2 保护模式
保护模式下的内存寻址
1.2.1 全局描述符
lgdt 与 sgdt
1.2.2 保护模式下的特权级
1.3 内存分页/虚拟地址
函数与汇编
函数名与标号一样,只是地址的人性化展示,最终会被编译器转换为一个实际的数字地址
//定义函数,这个函数本身不在栈里面存储
int abc(int a,int b){
int d;
return a+b;
}
.abc
db d
add a,b
mov eax,a
ret
//调用函数,需要利用到栈
abc(3,4)
push 4
push 3
call abc;//把当前地址入栈 然后跳转到abc地址处执行
1.6 i/o汇编
特权级概述
1.7 中断与 系统(函数)调用
8259a编程
利用0x15中断获取内存大小
2 内存管理模块
1.1 bitmap与地址池
3 任务模块(线程/进程)
3 文件操作系统
1.1 文件操作系统大览(布局篇)