公司的网站怎么建设响应式网站国内外现状
web/
2025/10/8 9:23:55/
文章来源:
公司的网站怎么建设,响应式网站国内外现状,建设网站还不如搬砖,一个网站的运营成本文章目录 3. 系统调用3.1 用户态与内核态3.2 系统调用分类3.3 如何从用户态切换到内核态#xff08;系统调用举例#xff09; 4. 内存管理4.1 内存管理是做什么的4.1.1 为什么需要虚拟地址空间4.1.2 使用虚拟地址访问内存有什么优势 4.2 常见的内存管理机制4.3 分页管理4.3.1… 文章目录 3. 系统调用3.1 用户态与内核态3.2 系统调用分类3.3 如何从用户态切换到内核态系统调用举例 4. 内存管理4.1 内存管理是做什么的4.1.1 为什么需要虚拟地址空间4.1.2 使用虚拟地址访问内存有什么优势 4.2 常见的内存管理机制4.3 分页管理4.3.1 基本概念4.3.2 地址转换由逻辑地址访问内存的过程4.3.3 快表4.3.3.1 为什么引入快表4.3.3.2 快表的访问流程 4.3.4 多级页表4.3.4.1 为什么引入多级页表 4.4 分段管理4.4.1 段表4.4.2 地址转换4.4.3 分页和分段的对比 4.5 段页式管理4.5.1 逻辑地址结构4.5.2 段表与页表4.5.3 地址转换 4.6 由逻辑地址访问内存的次数4.7 虚拟内存4.7.1 传统存储管理方式的特征及缺点4.7.2 局部性原理4.7.3 什么是虚拟内存4.7.4 虚拟内存的特征4.7.5 如何实现虚拟内存 4.8 页面置换算法4.8.1 最佳置换算法OPT4.8.2 先进先出置换算法FIFO4.8.3 最近最久未使用置换算法LRU4.8.4 最少使用置换算法LFU4.8.5 时钟置换算法CLOCKNRU4.8.6 改进型的时钟置换算法 3. 系统调用
3.1 用户态与内核态
进程在系统上的运行分为两个级别用户态和内核态。
用户态的进程可以直接读取用户程序的数据系统态的进程可以直接访问计算机的任何资源不受限制。
运行的应用程序基本都是运行在用户态如果调用操作系统提供的系统态的子功能就需要系统调用。
3.2 系统调用分类
系统调用按功能大致分为
设备管理。完成设备的请求、释放、启动等功能。文件管理。完成文件的读、写、创建及删除等功能。进程控制。完成进程的创建、撤销、阻塞及唤醒功能。进程通信。完成进程之间的消息传递或信号传递等功能。内存管理。完成内存的分配、回收以及获取作业占用内存区大小及地址等功能
3.3 如何从用户态切换到内核态系统调用举例
用户态进程主动要求切换到内核态的系统调用异常比如缺页异常外围设备的中断比如硬盘读写操作完成。
4. 内存管理
4.1 内存管理是做什么的 负责内存空间的分配与回收C中的malloc函数申请内存free函数释放内存 从逻辑上对内存空间进行扩充如4GB内存运行60GB大小的游戏 负责进行地址转换也就是把逻辑地址转换成相应的物理地址 内存保护。保证各进程在各自存储空间内运行互不干扰。 4.1.1 为什么需要虚拟地址空间
如果没有虚拟地址空间程序直接访问和操作的都是物理内存。这样会带来两个主要问题
用户程序可以访问任意内存寻址内存的每个字节这样就很容易破坏操作系统造成操作系统崩溃。想要同时运行多个程序特别困难。举个例子微信在运行的时候给内存地址 1xxx 赋值后QQ 音乐也同样给内存地址 1xxx 赋值那么 QQ 音乐对内存的赋值就会覆盖微信之前所赋的值这就造成了微信这个程序就会崩溃。
4.1.2 使用虚拟地址访问内存有什么优势
程序可以使用一系列相邻的虚拟地址来访问物理内存中不相邻的大内存缓冲区。程序可以使用一系列虚拟地址来访问大于可用物理内存的内存缓冲区。不同进程使用的虚拟地址彼此隔离。一个进程中的代码无法更改正在由另一进程或操作系统使用的物理内存。
4.2 常见的内存管理机制
内存管理机制分为连续管理方式指为一个用户程序分配一个连续的内存空间和非连续管理方式指允许一个程序使用的内存有着不相邻的分布 连续分配管理方式 分块管理 把内存分为大小相等且固定的几个块每个进程占用其中的一个。如果进程很小的话会浪费大量的空间。块式管理已经被淘汰。 非连续分配管理方式 分页管理 把内存分为若干个很小的页面相比分块划分的力度更大。分页管理提高了内存利用率减少内存碎片。 分页管理通过页表对应逻辑地址和物理地址。 分页管理虽然提高了内存利用率但是“页”无实际意义。 分段管理 把内存分为几个大小不固定的、有意义的段每个段定义了一组逻辑信息。例如主程序段Main、子程序段X、数据段D、栈段S等。 分段管理通过段表对应逻辑地址和物理地址。 段页式管理 段页式管理结合了分段管理和分页管理的优点。把主存先分成若干段每个段又分成若干页。段与段之间、段的内部因为是页都是离散的。
4.3 分页管理 4.3.1 基本概念 页框将内存空间分为一个个大小相等的分区比如每个分区4KB每个分区就是一个“页框”或者称为“页帧”、“内存块”、“物理块” 页框号每个页框有一个编号称为“页框号”或者“页帧号”、“内存块号”、“物理块号”。页框号从0开始 页/页面 将用户进程的地址空间也分为与页框大小相等的一个个区域称为“页”或“页面”。每个页面也有一个编号即“页号”页号也是从0开始。 一个进程的最后一个页可能并没有页框那么大这样最后一个页放在页框中会有内部碎片。因此页框不能太大避免产生过大的内部碎片。
操作系统以页框为单位为各个进程分配内存空间。进程的每个页面分别放入一个页框中。也就是说进程的页面与内存的页框有一一对应的关系。
各个页面不必连续存放也不必按照顺序可以放到不相邻的页框中。 分页管理的虚拟地址分为两部分一部分是存储页面号一部分是存储偏移量。 如果有K位表示“页内偏移量”则说明该系统中一个页面的大小是2^K个内存单元。如果有M位表示“页号”则说明该系统中一个进程最多允许有2^M个页面。
页表 分页管理中每个页表项由“页号”和“内存块号”组成。
4.3.2 地址转换由逻辑地址访问内存的过程
内存管理单元MMU管理着逻辑地址和物理内存的转换其中页表Page Table存储着页程序地址空间与页框物理内存的映射表。
下图页表存放着16个页这16个页要用4个比特位来进行索引定位。
例如对于虚拟地址0010 0000 0000 0100前4位是存储页面号00102后12位0000 0000 0100是存储偏移量。
根据页面号读取页表中对应表项2的内容1101。页表项内容的前3位表示内存块号最后一位表示是否存在于内存中0表示不存在1表示存在。
拼接页表项内容的前三位内存块号110和虚拟地址中的后12位存储偏移量0000 0000 0100得到物理地址110 0000 0000 0100。
根据得到的物理地址访问内存空间。 4.3.3 快表
4.3.3.1 为什么引入快表
快表的引入是为了加快逻辑地址虚拟地址到物理地址转换的速度。
在引入快表之前由逻辑地址访问内存的过程如下
根据逻辑地址的高位拿到页号根据页号访问内存中的页表根据页表的映射拿到实际的内存块号一次访问把内存块号和逻辑地址的低位拼接得到物理地址访问物理地址对应的内存二次访问
这个过程是需要两次直接访问内存的所以为了加快这个访问速度引入了快表。
快表可以认为是一个高速缓冲存储器Cache内容是页表的一部分或者全部内容和页表的功能是一样的只不过比在内存中的页表访问速度要快很多。
由于采用页表做地址转换读写内存数据时 CPU 要访问两次主存。有了快表有时只要访问一次高速缓冲存储器一次主存这样可加速查找并提高指令执行速度。
4.3.3.2 快表的访问流程
被访问的内存块很可能在短时间内再次被访问可能程序在一段时间内会多次访问同一个页表项。
所以在每次访问页表项时先在快表里查询是否有该页表项如果没有再去页表中查询并把查询的页表项存入快表。
如果快表满了就根据一些策略把其中的一些页表项淘汰掉再把新查询的页表加进去。
总结使用快表之后的地址转换流程如下
根据虚拟地址中的页号查快表如果该页在快表中直接从快表中读取相应的物理地址如果该页不在快表中就访问内存中的页表再从页表中得到物理地址同时将页表中的该映射表项添加到快表中当快表填满后又要登记新页时就按照一定的淘汰策略淘汰掉快表中的一个页。
4.3.4 多级页表
4.3.4.1 为什么引入多级页表
多级页表主要是为了避免把全部页表一直放在内存中占用过多空间的问题特别是那些根本就不需要的页表就不需要保留在内存中。属于时间换空间。
单级页表存在的问题
页表必须连续存放因此当页表很大时需要占用很多个连续的页框。——多级页表解决整个单级页表都会常驻内存这是没有必要的因为进程在一段时间内可能只要访问某几个特定的页面。——虚拟存储技术解决
两级页表将全部的页表项分组使得每组的页表项刚好能够装入一个内存块让各组页表项二级页表可以离散地分配在各个内存块中同时为了记录二级页表的顺序通过一个“页目录表”来映射二级页表的页号和二级页表存放的内存块号。
两级页表的引入使得虚拟地址的结构也要发生相应的变化一级页号二级页号页内偏移量
两级页表的地址转换 注意采用多级页表机制时各级页表的大小不能超过一个页面。 4.4 分段管理 4.4.1 段表 4.4.2 地址转换 段长大小是不固定的但是段表项长度是固定的不要混淆。
4.4.3 分页和分段的对比
单位 页是信息的物理单位段是信息的逻辑单位 目的 分页的目的是为了实现离散匹配提高内存利用率。分段的目的是更好地满足用户的需求。 层面 分页仅仅是系统管理的需要完全是系统行为对用户是不可见的。一个段通常包含着一组属于一个逻辑模块的信息分段对用户是可见的用户编程时需要显式地给出段名。 大小 页的大小是固定的且由系统决定。页表由页号可隐含和页框号组成段的长度不固定由用户编写的程序大小决定。段表由段号可隐含、段长、基址组成。 地址转换过程 分段管理相比于分页管理需要进行两次越界检查 段号与段表寄存器中的段表长度比较检查是否越界根据段表中记录的段长检查段内地址是否越界 地址空间 分页的用户进程地址空间是一维的程序员只需要给出一个记忆符指出页号即可表示一个地址。分段的用户进程地址空间是二维的程序员在标识一个地址时既要给出段名也要给出段内地址。 分段比分页更容易实现信息的共享和保护不可更改的代码可以共享内存碎片 分页管理内存空间利用率高不会产生外部碎片只会有少量的页内碎片分段管理会产生外部碎片。如果采用“紧凑”的方式来解决外部碎片会付出较大的时间代价。
4.5 段页式管理 4.5.1 逻辑地址结构 4.5.2 段表与页表
段页式管理中每个段对应一个段表项每个段表项由段号、页表长度、页表存放块号页表起始地址组成。每个段表项长度相等段号是隐含的。
分段管理中每个段表项由段号、段长、基址组成。
段页式管理中以及分页管理中每个页面对应一个页表项每个页表项由页号、页面存放的内存块号组成。
Note段页式管理中的段表项结构与分段管理中的段表项结构不同但段页式管理中的页表项结构与分页管理中的页表项结构相同。
一个进程对应一个段表但是一个进程有可能对应多个页表。
4.5.3 地址转换 4.6 由逻辑地址访问内存的次数 分页 单级页表 第一次访问内存——查内存中的页表第二次访问内存——访问目标内存单元 多级页表n级 逐级访问页表n次第n1次访问 分段 第一次访问内存——查内存中的段表第二次访问内存——访问目标内存单元 段页式 第一次访问内存——查内存中的段表第二次访问内存——查页表第三次访问内存——访问目标内存单元 快表 分页管理、分段管理中都可以引入快表将近期访问过的页表项/段表项放到快表中。若快表命中则仅需一次访问内存。段页式管理中也可以引入快表将近期访问过的段号和页号作为查询快表的关键字。若快表命中则仅需一次访问内存。
4.7 虚拟内存 4.7.1 传统存储管理方式的特征及缺点 4.7.2 局部性原理 4.7.3 什么是虚拟内存 4.7.4 虚拟内存的特征 4.7.5 如何实现虚拟内存 实现虚拟内存操作系统需要在传统的非连续分配存储管理方式的基础上再增加两个主要功能
请求调页/请求调段——解决访问的信息不在内存时的问题页面置换/分段置换——解决内存空间不够的问题
实现虚拟内存的三种主要方式为 请求分页存储管理 请求分页存储管理建立在传统分页管理之上为了支持虚拟内存而增加了请求调页功能和页面置换功能。请求分页是目前最常用的一种实现虚拟内存的方法。在作业开始运行时仅装入当前要执行的部分页面即可运行假如在作业运行的过程中发现要访问的页面不在内存则由处理器通知操作系统将相应的页面调入到内存。如果发现在把页面调入内存时内存已满操作系统也可以将暂时不用的页面置换到外存中。 请求分段存储管理 原理和请求分页存储管理相似不过是把页面换成段 请求段页式存储管理
不管是上面哪种实现方式一般都需要
一定容量的内存和外存在载入程序的时候只需要将程序的一部分装入内存而将其他部分留在外存然后程序就可以执行了缺页中断/缺段中断如果需执行的指令或访问的数据尚未在内存称为缺页或缺段则由处理器通知操作系统将相应的页面或段调入到内存然后继续执行程序虚拟地址空间都需要把逻辑地址转换为物理地址。
4.8 页面置换算法
请求分页存储管理中的页面置换算法。
页面的换入、换出需要磁盘IO会有较大的开销因此好的页面置换算法应该追求更少的缺页率。 4.8.1 最佳置换算法OPT
最佳置换算法每次选择淘汰的页面将是以后永不使用或者在最长时间内不再被访问的页面这样可以保证最低的缺页率。 实际上只有在进程执行的过程中才能知道接下来会访问到的是哪个页面无法提前预判页面访问序列。因此最佳页面置换算法是无法实现的。
4.8.2 先进先出置换算法FIFO
先进先出置换算法每次选择淘汰的页面是最早进入内存的页面。
实现算法把调入的页面根据调入的先后顺序排成一个队列需要换出页面时选择队头页面换出即可。
队列的最大长度限制取决于系统为进程分配了多少个内存块。 4.8.3 最近最久未使用置换算法LRU
最近最久未使用置换算法每次淘汰的页面是最近最久未使用的页面。
实现方法LRU赋予每个页面一个访问字段用访问字段记录该页面自上次被访问以来所经历的时间T。当需要淘汰一个页面时选择现有页面中T值最大的即最近最久未使用的页面。 4.8.4 最少使用置换算法LFU
最少使用页面置换算法LFULeast Frequently Used选择在之前时期使用最少的页面作为淘汰页。
4.8.5 时钟置换算法CLOCKNRU
时钟置换算法又称最近未用算法NRUNot Recently Used是一种性能和开销较均衡的算法。
CLOCK算法的实现方法为每个页面设置一个访问位再将内存中的页面都通过链接指针链接成一个循环队列。当某页被访问时其访问位 置1。当需要淘汰一个页面时只需检查页的访问位。如果是0则选择该页换出如果是1则将其置为0暂不换出继续检查下一个页面。如果第一轮扫描中所有页面都是1则将这些页面的访问位依次置0后再进行第二轮扫描第二轮扫描中一定会有访问位为0的页面因此简单的CLOCK算法选择淘汰一个页面最多会经过两轮扫描。 4.8.6 改进型的时钟置换算法
简单的时钟置换算法仅考虑到一个页面最近是否被访问过。事实上如果被淘汰的页面没有被修改过就不需要执行I/O操作写回外存。
只有被淘汰的页面被修改过时才需要写回外存。
因此改进型的时钟置换算法除了考虑一个页面最近是否被访问过之外还应考虑该页面是否被修改过。在其他条件都相同时应优先淘汰没有被修改过的页面避免I/O操作。
访问位访问位0表示最近未被访问过访问位1表示最近被访问过。修改位修改位0表示页面没有被修改过修改位1表示页面被修改过。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/88977.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!