操作系统
虚拟内存
虚拟内存使每个进程认为其独占一个连续的大块的地址空间,即为虚拟地址空间,而在真实使用内存时通过页表寻找虚拟地址所对应的实际物理地址,可能是内存中不连续的或者硬盘中的内容,当所需内容不在内存中时通过缺页置换,将内容装载到空闲空间中或者将未使用内容换出到硬盘,需要内容放入内存。
虚拟内存讲一下
https://blog.csdn.net/dianxin113/article/details/107689205
虚拟内存是操作系统内存管理的一种技术,虚拟地址空间构成虚拟内存。使应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上通过虚拟地址映射到的可能是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上(Swap),在需要时进行数据交换。物理内存中,每个进程都有自己的页表,实现虚拟内存和物理内存的映射,页表命中时直接访问,未命中则需要缺页置换
Cache
CPU要读数据首先是在cache中读,如果cache命中,也叫cache hit,CPU就可以极快的得到该地址处的值。如果cache miss 也就是没有命中,它就会通过总线在内存中去读,并把连续的一块单元加载到cache中,下次好使用。
LRU (英文:Least Recently Used), 意为最近最少使用,这个算法的精髓在于如果一块数据最近被访问,那么它将来被访问的几率也很高,根据数据的历史访问来淘汰长时间未使用的数据。
1.新添加的数据放在头部 2.被访问到的数据放在头部3.超过最大缓存量的数据将被移除。
进程间通信
管道
命名管道
信号量
共享内存
IO多路复用
将用户socket对应的fd注册进epoll,然后epoll帮你监听哪些socket上有消息到达,这样就避免了大量的无用操作。此时的socket应该采用非阻塞模式。
这样,整个过程只在调用select、poll、epoll这些调用的时候才会阻塞,收发客户消息是不会阻塞的,整个进程或者线程就被充分利用起来,这就是事件驱动,所谓的reactor模式。