
操作系统
文章平均质量分 58
薛定谔的智能
这个作者很懒,什么都没留下…
展开
-
指令与条件码
一.ALU:算数逻辑单元 ALU从寄存器中读取数据后,执行相应的运算,在返回目的寄存器rdx中.简单示例如下图 当然ALU除了执行算术和逻辑运算指令以外,还会根据运算结果去设置条件码寄存器. 二.条件码寄存器: 长度为单个比特位 CF检测溢出,ZF检测零也就是说a+b结果为1, ZF为0,其他类似 相应c代码与汇编例子: 三.嵌套数组: 地址计算:xd起始地址,L表示数据类型T的大小,对于int就是...原创 2022-05-22 16:46:10 · 2752 阅读 · 1 评论 -
程序的机器级表示
一.生成汇编: 1)对于c gcc -S mstore.c 2)对于cpp:g++ -Smstore.cpp pushq: 将寄存器rbx的值压入程序栈进行保存 movq:寄存器rbx的值与rdx的值一致,都是dest指针所指向的内存地址 popq:在函数返回前,恢复rbx的内容 ret:函数返回 intel64位处理器包含16个通用目的的寄存器,这些寄存器用来存放整数数据和指针.如图下 调用者保存寄存器和被调用者保存寄存器,例如函数A调用函数B,B中rbx寄存器被修改...原创 2022-05-15 16:28:28 · 530 阅读 · 0 评论 -
CSAPP--浮点数
一.定点表示小数 缺点:表示不了很大的数 二.IEEE关于浮点数表示法 float32:符号位1位,阶码字段:8位,小数点为23位 float32:符号位1位,阶码字段:11位,小数点为52位 三.浮点数的数值类型 1.规格化值 2.非规格值 3.特殊值 而阶码的值决定其属于那一类 当阶码的二进制不为0和255时,表示规格化值; 当阶码的二进制全为0时,表示非规格化值; 当阶码的二进制全为1时,表示特殊化值,其包含两类一类是无穷大或无穷小,一类不是一个数(..原创 2022-03-20 11:52:34 · 515 阅读 · 0 评论 -
CSAPP--整数的运算
一.无符号数加法运算 二.有符号数加法运算 三.无符号数乘法 截断w位也就是对2\w取模 参考: 【合集】CSAPP-深入理解计算机系统_哔哩哔哩_bilibili原创 2022-03-13 23:01:11 · 442 阅读 · 0 评论 -
CSAPP--整数的表示
非负数编码: 负数编码(采用补码即原码取反+1): 故对于四位补码,最大值为7,最小值为-8 所以各类型负数/非负数范围: 不同字节无符号最大值 不同字节有符号最大值 不同字节有符号最小值 例子: 这是因为虽然位模式不变,但是解释位的方式改变了。 ...原创 2022-03-06 11:29:26 · 229 阅读 · 0 评论 -
CSAPP--信息的表示与处理
虚拟地址空间: 大多数 Intel 兼容机采用小端模式,IBM 和 Sun 公司的机器大多数机器采用大端法。 对于很多新的处理器,支持双端法,可以配置成大端或者小端运行。例如基于 ARM 架构的处理器,支持双端法,但是 Android 系统和 iOS 系统却只能运行在小端模式. 下面是代码测试,获取16进制表示: #include <stdio.h> #把指针看成指向一个字节的序列,而不是对象的原始数据类型 typedef unsigned char * byte_p..原创 2022-02-20 16:02:15 · 338 阅读 · 0 评论 -
CSAPP-计算机漫游
一.编译系统的工作流程: test.cpp #include <iostream> using namespace std; int main() { //hahha cout<<"hello world"<<endl; return 0; } 直接生成可执行程序test g++ -o test test.cpp 深入解析生成可执行程序test的过程 1.g++ -E test.cpp > test.i 这一步生成test.i进行预处理,.原创 2021-12-11 21:24:18 · 649 阅读 · 0 评论 -
操作系统--内核级线程实现
五段论 `: 进入内核靠的是中断,fork是创建系统进程调用,进程由资源+执行序列组成,而创建执行序列其实就是创建线程. TSS:任务结构段 参考: 操作系统_哈尔滨工业大学_中国大学MOOC(慕课) 哈工大操作系统实验(二)系统调用 ...原创 2021-11-14 18:29:30 · 235 阅读 · 0 评论 -
操作系统--用户级线程与内核级线程
一.多进程是操作系统基本图像 二.线程 2.1线程引入 可以切指令不切表,也就是资源不动,指令执行分开,更加轻量化,从而提高效率,保留并发优点,避免进程切换代价,也就引入了线程. 2.2多线程例子 同时触发以及用yield交替执行 104是B的函数返回地址,将104压栈,其他也是陆续压栈,用两个执行序列和一个栈,就会发现第一个线程,居然返回的函数地址是404,也就是线程在乱跑. 解决办法,一个序列一个栈,切回线程要将栈切回,用一个地方存放栈指针也就是TCB(threa...原创 2021-11-07 15:26:21 · 1132 阅读 · 0 评论 -
操作系统--多进程管理CPU
一.cpu管理直观做法: cpu一直在循环取址执行,所以只需要设好pc初值即可 存在问题:io会占用时间长,导致cpu利用率低. 所以需要不停切换,执行多个程序,也就是并发. 但是在切换的时候,除了记录返回地址,还要记录当前执行程序运行时刻(也就引入进程),就像人看书一样有人打扰,需要做个记号,下次接着看.使用的是PCB(Process Control Block)的数据结构来记录进程信息,这是操作系统中最重要的结构. 总结:用多进程管理cpu. 二.多进程图像 ...原创 2021-10-31 12:31:26 · 1098 阅读 · 0 评论