操作系统相关知识

 为什么跟内核打交道效率就低呢?


 因为我们的应用程序和内核打交道会经过已下步骤:
 1.app发出0x80(80H)中断和需要内核调用的函数的id,或调用sysenter原语
 2.os进入内核态
 3.在中断向量表中查找处理例程(根据函数id查询出对应的函数)
 4.保存硬件现场,CS,IP等寄存器的值
 5.保存app现场,堆栈与寄存器的值
 6.执行中断例程system_call
    1.根据参数与编号寻找对应例程(需要调用的函数)
    2.执行并返回
 7.恢复现场
 8.返回用户态
 9.程序继续执行

 汇编的本质:助记符


 给01000010起个别名,这种别名就叫做汇编,汇编语言就是机器语言,Java,c#这些相对于汇编语言来说都是高级语言。

 cpu主频:一秒钟能做多少次二进制运算。
 cpu和内存是计算机的主要结构,cpu通过总线去内存里拿指令和数据,


 cpu的组成:


  1.PC:程序计数器(PC,Program counter),用于存放指令的地址,存取下一条指令的地址(内存中的地址)
  2.Registers:寄存器,从内存中拿取数据到cpu进行计算,存数据的地方,寄存器的数量很多,多达好几十个,每个寄存器都有不同的作用,
  3.ALU:算术逻辑单元,将数据和指令拿到之后,真正执行计算的组件,使用寄存器的数据和指令寄存器的指令,计算完毕之后,写回到内存

 从内存中取数据相对于cpu来说特别慢,就放到L3缓存中,还是慢,就放到L2,还是慢,放到L1里;cpu的每个核都有自己的L1级缓存,也都有自己的L2级缓存,在一个cpu里,所有的核,共享L3级缓存

 超线程:

线程是cpu执行的基本单位,执行这个程序就是执行程序的某一个线程,如果执行某个线程的时间片执行完毕,需要切换到另一个线程,则需要将上一个线程指令和数据保存到缓存或者内存中
 (保存现场),在CPU中,ALU是最快的,可以在一个核里,放两组程序计数器和寄存器,这样一个核里就可以放两个线程,就可以充分利用ALU,ALU的切换可比恢复现场那种方式要快的多,(一个
 运算单元,两组线程对应的资源单元,叫做超线程)

 cpu乱序执行:

例如有两个线程A,B,   A需要去内存中拿取数据,这个过程相对于cpu来说是很慢的,这个期间,cpu发现自己没事干了,为了优化cpu的执行速度,他会继续看下面一条指令,如果发现
 下一条指令和上一条指令没有什么关系,在第一条指令执行的过程中,先把第二条执行完,这样第二条指令就会放到第一条指令前面去执行了,

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值