![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统知识
峰子_狂人
我为JAVA狂
展开
-
内存管理
内存的发展历程:DOS时代:同一时间只能有一个进程在执行windows95:多个进程装入内存(要解决两个问题,1内存撑爆,2相互打扰,访问别人的内存空间)出现了现在的内存管理系统:虚拟地址,分页装入,软硬件结合寻址内存撑爆问题如何解决分页:内存中分成固定大小的页框(4K),把程序(硬盘上的)分成4K大小的块,用到那一块,加载那一块,加载的过程中,如果内存已满,新加载的块会把最不常用一块放到swap分区,把最新的一块加载进来(这个就是著名的LRU算法)相互打扰问题如何解决虚拟内存:让进程工原创 2021-03-22 16:37:26 · 47 阅读 · 0 评论 -
进程,线程,纤程
进程:(linux称为task,进程描述符:PCB(process control block))口语化:就是一个程序运行起来的状态专业回答:进程是操作系统分配资源的基本单位(独立的内存空间,每个进程都有自己的独立的内存空间)线程:口语化:是一个进程中的不同执行路径专业化:线程是执行调度的基本单位线程共享进程的内存空间,没有独立的内存空间。纤程(Fiber)用户态的线程,线程中的线程,切换和调度不用经过OS(操作系统)优势:1.占用资源很少 (操作系统启动一个线程需要1M,Fiber启动需原创 2021-03-22 12:12:26 · 100 阅读 · 0 评论 -
CPU层面如何解决指令重排
主要是依靠 内存屏障对某部分内存做操作时前后添加的屏障,屏障前后的操作不可以乱序执行intelifence,mfence,sfence原语也可以使用锁总线来解决 lockvolatile两个特点,1.线程间的可见性。2.防止指令重排序底层是 lock addl 来实现变量的可见性和保持程序顺序。jvm层面StoreStoreBarriervolatile 写操作StoreLoadBarrierLoadLoadBarriervolatile 读操作LoadSotreBarr原创 2021-03-22 13:34:34 · 378 阅读 · 0 评论 -
内核态,用户态(linux)
cpu分不同的指令级别,级别一般分为4级,0,1,2,3 。ringlinux只用0级和3级内核态:ring0级用户态:ring3级 对于系统的关键访问,需要经过kernel的同意,保证系统的健壮性。都包括200多个系统调用 sendfile ,read ,write,fork,pthread 等操作...原创 2021-03-22 09:27:49 · 74 阅读 · 0 评论