浅谈操作系统的内存管理

本文探讨了操作系统的内存管理,包括地址空间的概念,基址和界址寄存器的作用,以及如何通过交换技术在内存和硬盘间管理进程。同时,提到了进程调度、同步和线程选择的考量因素,建议根据共享内存大小和业务需求选择单进程多线程或多进程单线程的模型。
摘要由CSDN通过智能技术生成

为了支持多进程(同一时间允许多个进程),解决直接操作内存带来的各种问题,引入了地址空间——允许每个进程都拥有自己的地址,硬件上需要两个寄存器——基址寄存器(保存进程开始地址)和界址寄存器(保存上界,防止内存溢出)。当我们执行一条指令,实际的物理内存地址是根据基址和偏移量来计算得到。而每个进程拥有的地址空间是不同的,因此也就使得多进程成为可能。


考虑到内存大小很难容纳下所有并发执行的进程——交换技术将闲置的进程交换出内存,暂存在硬盘上,待执行时再交换回内存。


虚拟内存的基本思路是:每个进程都有独立的逻辑地址空间,内存被分为大小相等的称为页的数据块,每个页都是一段连续的地址,通常虚拟内存比物理内存大,当访问虚拟内存时,首先通过MMU计算得到对应的物理地址,如果虚拟内存页不存在物理内存中,会产生缺页中断,磁盘,内存满的话会使用置换算法。虚拟内存和物理内存的匹配是通过页表来实现,页表在MMU中。
页置换算法:最近不常使用算法,FIFO算法,最久未使用算法LRU。

进程的调度、同步等操作通常是由内核来完成,而线程...


单进程多线程/多进程单线程:

  • 首先根据共享内存大小来判断:如果共享内存较大,就用多线程,避免cpu cache频繁的换入换出(比如memcached);
  • 其次根据自身的业务场景是否有数据共享/单任务拆分并行化需求。
  • 通常尽量选用多进程,享受单线程编程带来的便利。
两种模型的区别在于:进程更安全,一个进程完全不会影响其他进程,但进程间通信比线程间通信的性能差很多(比如Nginx一个master多个worker,进程间只进行有限的通信,传递命令而非数据)。

接上——》》》 就进程和线程的开销分为时间和空间:对于时间开销,Linux下创建进程和线程差不多,事实上创建线程的时间开销略微大一些,对于空间开销,Linux下显然进程大(Linux中没有线程概念,线程被当做进程实现,Linux进程本身就已经足够轻量,线程是进程共享资源的手段)。但windows下不一样。如果需要创建极大数量的进程,此时可以考虑使用线程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值