os 2- 内存管理
发布于
os

一般单个虚拟地址空间就比物理内存要大,另每个进程都有自身的虚拟地址空间

内核和 CPU 必须考虑如何将实际可用的物理内存映射到虚拟地址空间的区域。一般用页表来为物理地址分配虚拟地址

虚拟地址关系到进程的用户空间和内核空间,而物理地址用来寻址实际可用的内存

物理内存页经常被称为页帧,而页一般用来指虚拟地址空间的页


内存分配管理方式

  • 连续(块式

    为用户程序分配一个连续的内存空间

  • 非连续(页式 和 段式

    允个程序使用的内存分布在离散或者说不相邻的内存中

  1. 块式管理

    远古时代将内存分为几个固定大小的块,每个块中只包含一个进程

    如果程序运行只需要很小的空间的话,分配的这块内存很大一部分几乎被浪费了。这些在每个块中未被利用的空间,称为碎片

  2. 页式管理

    相比块式管理的划分力度更大,提高内存利用率,减少碎片

    通过 页表 对应逻辑地址和物理地址

  3. 段式管理

    页式管理虽然提高了内存利用率,但是页式管理其中的页实际并无任何实际意义

    段式管理把主存分为一段段的,每一段的空间又要比一页的空间小很多

    最重要的是段是有实际意义的,如,主程序段 MAIN、子程序段 X、数据段 DATA 及栈段 STACK 等

段页式管理机制

结合段式管理和页式管理的优点。把主存先分成若干段,每个段又分成若干页,也就是说 段与段之间以及段的内部的都是离散的

os 3- 内存管理算法
发布于
os

假设这是一段连续的页框,阴影部分表示已经被使用的页框,现在需要申请一个连续的5个页框

这段内存上不能找到连续的5个空闲的页框,就会去另一段内存上去寻找5个连续的页框,久而久之形成了页框的浪费

伪共享(false sharing)
发布于
concurrent

并发编程无声的性能杀手

数据在内存中以 page 为单位存在;在cache 里以 cache line 为单位

伪共享:缓存系统以 cache line为单位存储,多线程修改互相独立的变量时,如果这些变量共享同一个cache line,就会无意中影响彼此的性能

扫码登陆
发布于
安全

通过二维码,用可信任设备(如自己手机)控制不可信任设备上的登录行为

  • 更方便

    省去不便手动输入的设备(如电视)上输入的环节

  • 更安全

    避免在安全等级低的设备和环境(公共电脑、Web页面)输入密码

网站架构的伸缩性设计
发布于
arch

1.1 不同功能物理分离实现伸缩

纵向分离

业务流程不同部分分离部署,实现伸缩

横向分离

不同业务模块分离部署,实现伸缩

1.2 单一功通过集群规模实现伸缩

应用服务器集群性和数据服务器集群伸缩,对数据状态管理的不同,技术实现有很大区别

一头牛拉不动车的时候,不要去寻找一头更强壮的牛,而是用两头牛来拉车

当我们在讨论架构时,该用什么姿势?
发布于
dev

架构的本质

任何系统,自然情况下,都是从有序到无序

热力学第二定律,自然界一切自发过程都有方向性,孤立系统由有序变为无序,即它的熵不断增加,最终寂灭

但生物可以通过和外界交互,主动进行新陈代谢,制造 “负熵” 来保证自身有序,继续生存

同样,软件随着功能增多,调用量增长,逐渐碎片化,越来越无序,最终无法维护和扩展,所以系统在一段时间的野蛮生长后,也需要及时干预,避免越来越无序

架构的本质就是对系统进行有序化重构,不断减少系统的 “熵”,使系统不断进化

架构是如何实现无序到有序的? 基本的手段就是分和合,先把系统打散,然后重新组合

《深入理解计算机系统》
发布于
book

万丈高楼平地起,计算机系统就像程序员金字塔的地基。理解了计算机系统的构造原理,在写程序的道路上才能越走越远

道理很早就懂,一直没下定决心好好钻研,或许觉得日常工作中根本用不到这些,又或许是每次拿起书看到那些复杂的底层架构,看到存储器,寄存器,CPU,总线等等这些概念就头大