当前位置: 首页 > news >正文

上海网站建设流进销存软件终身免费版

上海网站建设流,进销存软件终身免费版,昆明专业的网站制作建设,中文网站建设合同3.4 虚拟内存 直接使⽤物理内存会产⽣⼀些问题 1. 内存空间利⽤率的问题#xff1a;各个进程对内存的使⽤会导致内存碎⽚化#xff0c;当要⽤ malloc 分配⼀块很⼤的内存空间时#xff0c;可能会出现虽然有⾜够多的空闲物理内存#xff0c;却没有⾜够⼤的连续空闲内存这种…3.4 虚拟内存 直接使⽤物理内存会产⽣⼀些问题 1. 内存空间利⽤率的问题各个进程对内存的使⽤会导致内存碎⽚化当要⽤ malloc 分配⼀块很⼤的内存空间时可能会出现虽然有⾜够多的空闲物理内存却没有⾜够⼤的连续空闲内存这种情况 2. 读写内存的安全性问题物理内存本身是不限制访问的任何地址都可以读写 3. 进程间的安全问题各个进程之间没有独⽴的地址空间⼀个进程由于执⾏错误指令或是恶意代码都可以直接修改其它进程的数据甚⾄修改内核地址空间的数据这是操作系统所不愿看到的 4. 内存读写的效率问题当多个进程同时运⾏需要分配给进程的内存总和⼤于实际可⽤的物理内存时需要将其他程序暂时拷⻉到硬盘当中然后将新的程序装⼊内存运⾏。由于⼤量的数据频繁装⼊装出内存的使⽤效率会⾮常低虚拟内存 虚拟内存是计算机系统内存管理的⼀种技术。它使得应⽤程序认为它拥有连续可⽤的内存⽽实际上它通常是被分隔成多个物理内存碎⽚还有部分暂时存储在外部磁盘存储器上在需要时进⾏数据交换。 [1] 虚拟内存有什么作⽤ ● 解决了多进程之间地址冲突的问题。由于每个进程都有⾃⼰的⻚表进程也没有办法访问其他进程的⻚表所以每个进程的虚拟内存空间就是相互独⽴的。 ● 在内存访问⽅⾯操作系统提供了更好的安全性。⻚表⾥的⻚表项中除了物理地址之外还有⼀些标记属性⽐如控制⼀个⻚的读写权限标记该⻚是否存在等。 虚拟地址空间 对于⼀个单⼀进程的概念这个进程看到的将是地址从0开始的整个内存空间。虚拟存储器是⼀个抽象概念它为每⼀个进程提供了⼀个假象好像每个进程都在独占主存每个进程看到的存储器是⼀致的称为虚拟地址空间。在 Linux 操作系统中虚拟地址空间的内部⼜被分为内核空间和⽤户空间两部分不同位数的系统地址空间的范围也不同。⽐如最常⻅的 32 位和 64 位系统如下所示。虽然每个进程都各⾃有独⽴的虚拟内存但是每个虚拟内存中的内核地址其实关联的都是相同的物理内存。这样进程切换到内核态后就可以很⽅便地访问内核空间内存。 ⽤户空间内存从低到⾼分别是 6 种不同的内存段 ● 程序⽂件段.text包括⼆进制可执⾏代码 ● 已初始化数据段.data包括静态常量 ● 未初始化数据段.bss包括未初始化的静态变量 ● 堆段包括动态分配的内存从低地址开始向上增⻓ ● ⽂件映射段包括动态库、共享内存等从低地址开始向上增⻓ ● 栈段包括局部变量和函数调⽤的上下⽂等。栈的⼤⼩是固定的⼀般是 8 MB。当然系统也提供了参数以便我们⾃定义⼤⼩          虚拟内存实现思路 1. 在系统中为每个程序定义⼀个虚拟地址空间虚拟地址空间中的地址都是连续的 2. 虚拟地址空间被分割成多个块每块称为⼀个⻚或者⻚⾯ 3. 物理内存被分成和⻚⾯⼤⼩相同的多个区域称作⻚框 4. 程序加载时可将任意⼀个⻚⾯放⼊内存中的任意⼀个⻚框 5. CPU 的硬件负责将虚拟地址映射到物理内存中的地址⻚⾯ - ⻚框 6. 程序的整个地址空间⽆需全部载⼊物理内存还有部分暂时存储在外存上需要时再换⼊内存 7. 如果程序引⽤到⼀部分不在虚拟地址时会发⽣缺⻚中断由操作系统负责将缺失的⻚⾯加载⼊⻚框中并重新执⾏失败的指令          内存管理单元MMU将CPU中 负责地址转换 的部分统称为内存管理单元。利⽤地址转换操作系统就可以控制进程的所有内存访问确保访问在地址空间的界限内。这个技术的关键是硬件⽀持硬件可以快速地将内存访问操作中的虚拟地址转换为物理地址。对于⼀个⻚式内存地址转换有三个步骤 ● 把虚拟内存地址切分成⻚号和偏移量 ● 根据⻚号从⻚表⾥⾯查询对应的物理⻚号 ● 直接拿物理⻚号加上前⾯的偏移量就得到了物理内存地址。 TLB 的原理 现代操作系统中⻚表的个数是很多的⽽每次执⾏语句时都需要先查找⻚表将虚拟地址转换为物理内存地址。这部分切换的时间开销是很⼤的。因此解决⽅案是为计算机设置⼀个转换检测缓冲区TLBtranslation-lookaside buffer是 MMU内存管理单元的⼀部分。它提供⼀个缓冲区 89 记录虚拟⻚⾯号到物理⻚框号的映射这样可以在 O(1) 的时间⾥直接将虚拟⻚⾯映射到物理⻚框不需要访问⻚表从⽽节省时间。 ⼯作流程如果⻚⾯号在 TLB 中得到⻚框号访问内存否则从内存中的⻚表中得到⻚框号将其存⼊ TLB访问内存。 内存管理⽅法 段式内存管理按照逻辑意义将程序分成若⼲个段每个段独⽴载⼊到内存的不同区间中通过段表对物理地址进⾏映射 优点按照逻辑关系划分能产⽣连续的内存空间。 缺点每个段必须连续、全部加载到内存中会产⽣内存碎⽚连续空间不⾜与硬盘交互导致内存交换的效率低的问题。 ⻚式内存管理⻚式管理把内存空间按⻚的⼤⼩划分成若⼲⻚⾯然后把⻚式虚拟地址与内存地址建⽴ ⼀⼀对应的⻚表。⽽当进程访问的虚拟地址在⻚表中查不到时系统会产⽣⼀个缺⻚异常进⼊系统内核空间分配物理内存、更新进程⻚表最后再返回⽤户空间恢复进程的运⾏。 优点不存在外部碎⽚只在每个进程的最后⼀个⻚中存在内部碎⽚ 缺点程序全部装⼊内存要求有相应的硬件⽀持。例如地址转换模块缺⻚中断的产⽣和选择淘汰⻚⾯等都要求有相应的硬件⽀持。这增加了机器成本和系统开销。 段⻚式内存管理把分段和分⻚两种⽅式结合先把程序按照逻辑意义分成段然后每个段再分成固定⼤⼩的⻚。这样地址结构就由段号、段内⻚号和⻚内位移三部分组成。Linux 系统主要采⽤了分⻚管理但是由于 Intel 处理器的发展史Linux 系统⽆法避免分段管理。于是 Linux 就把所有段的基地址设为 0也就意味着所有程序的地址空间都是线性地址空间虚拟地址相当于屏蔽了 CPU 逻辑地址的概念所以段只被⽤于访问控制和内存保护。 ⻚⾯放置算法         空闲链表与内存池https://zhuanlan.zhihu.com/p/73468738 1. 最佳适应算法检查所有空闲分区选择和新进程申请内存⼤⼩最接近的空闲分区 优点该算法保留⼤的空闲区 缺点检查所有空闲分区需要时间。外部碎⽚多会留下许多难以利⽤的很⼩的空闲分区称为外部碎⽚。可以采⽤内存紧凑的⽅法将被使⽤的分区都移动到⼀起减少外部碎⽚。但是移动内存中的代码和数据也需要很多时间 2. 最差适应算法每次为进程分配分区时都选择最⼤的空闲分区分配。最差适应算法使链表中的结点⼤⼩趋于均匀适⽤于请求分配的内存⼤⼩范围较窄的系统 优点该算法保留⼩的空闲区尽量减少外部碎⽚的产⽣ 缺点检查⽐较所有的空闲区间需要时间系统中不会存在⾯积很⼤的空闲区间难满⾜⼤进程的要求 3. ⾸次适应法只要发现能⽤的分区就分配。这种⽅法⽬的在于减少查找时间。为适应这种算法空闲分区表空闲区链中的空闲分区要按地址由低到⾼进⾏排序。该算法优先使⽤低址部分空闲 区在低址空间造成许多⼩的空闲区在⾼地址空间保留⼤的空闲区 优点可以剩下⼤的分区 缺点外部碎⽚多集中在低址部分并且每次查找都是从低址部分开始的这⽆疑⼜会增加查找可⽤空闲分区时的开销 4. 下次适应法操作系统记住接下来该检查的空闲分区的位置给进程分配分区时系统从记录的分区开始依次向后查找直到碰到能⽤的分区为⽌如果到链表尾还没有找到就再从头开始 缺点很难剩下⾯积很⼤的区间会使剩余分区的⼤⼩⽐较平均。 ⻚⾯置换算法 当出现缺⻚异常需调⼊新⻚⾯⽽内存已满时选择被置换的物理⻚⾯也就是说选择⼀个物理⻚⾯换出到磁盘然后把需要访问的⻚⾯换⼊到物理⻚。 1. 最佳⻚⾯置换算法置换在「未来」最⻓时间不访问的⻚⾯。最佳⻚⾯置换算法作⽤是为了衡量你的算法的效率你的算法效率越接近该算法的效率那么说明你的算法是⾼效的。 2. 先进先出置换算法FIFO直接换出最早装⼊的⻚⾯。 优点简单 缺点性能不是很好因为它淘汰的可能是常⽤的⻚⾯ 适⽤场景数据只⽤⼀次将来不太可能使⽤ 3. 时钟置换法Clock将⻚⾯保存在环形链表中只需要后移队头指针。如果该位为 0淘汰该⻚如果该位为 1将该位设为 0 优点避免了移动链表节点的开销 4. 最近最少使⽤法LRULeast Recently Used优先淘汰最久未被访问的⻚⾯。根据局部性原理⼀个进程在⼀段时间内要访问的指令和数据都集中在⼀起。如果⼀个⻚⾯很久没有被访问那么将来被访问的可能性也⽐较⼩。 优点实验证明 LRU 的性能较好能够降低置换频率 缺点存在缓存污染问题即由于偶发性或周期性的冷数据批量查询热点数据被挤出去导致缓存命中率下降 适⽤场景访问分布未知的情况 5. 最少频率使⽤法LFULeast Frequently Used优先淘汰最近访问频率最少的数据。 优点能够避免缓存污染问题对 LRU 的命中影响 缺点存在访问模式问题即如果访问内容发⽣较⼤变化LFU 需要⽤更⻓的时间来适应导致缓存命中率下降维护相关数据结构的开销⼤ 6. 随机淘汰法Random实现简单不需要保留有关访问历史记录的任何信息 适⽤场景如果应⽤对于缓存的访问概率相等则可以使⽤这个算法。 磁盘调度算法 为了提⾼磁盘的访问性能⼀般是通过优化磁盘的访问请求顺序来做到的。寻道的时间是磁盘访问最 耗时的部分如果请求顺序优化得当必然可以节省⼀些不必要的寻道时间从⽽提⾼磁盘的访问性能。 1. 先来先服务 2. 最短寻道时间优先Shortest Seek FirstSSF算法优先选择从当前磁头位置所需寻道时间最短的请求。但这个算法可能存在某些请求的饥饿 3. 扫描算法为了防⽌上述饥饿问题可以规定磁头在⼀个⽅向上移动访问所有未完成的请求直到磁头到达该⽅向上的最后的磁道才调换⽅向这就是扫描Scan算法。 4. 循环扫描Circular Scan, CSCAN 只有磁头朝某个特定⽅向移动时才处理磁道访问请求⽽返回时直接快速移动⾄最靠边缘的磁道也就是复位磁头这个过程是很快的并且返回中途不处理任何请求该算法的特点就是磁道只响应⼀个⽅向上的请求。 5. LOOK 与 C-LOOK算法扫描算法和循环扫描算法都是磁头移动到磁盘「最始端或最末端」才开始调换⽅向。优化的思路就是磁头在移动到「最远的请求」位置然后⽴即反向移动。 内存不⾜会发⽣什么          主要有两类内存可以被回收⽽且它们的回收⽅式也不同。⽂件⻚和匿名⻚的回收都是基于 LRU 算法也就是优先回收不常访问的内存。 ● ⽂件⻚内核缓存的磁盘数据Buffer和内核缓存的⽂件数据Cache都叫作⽂件⻚。⼤部分⽂件⻚都可以直接释放内存以后有需要时再从磁盘重新读取就可以了。⽽那些被应⽤程序修改过并且暂时还没写⼊磁盘的数据也就是脏⻚就得先写⼊磁盘然后才能进⾏内存释放。所以回收⼲净⻚的⽅式是直接释放内存回收脏⻚的⽅式是先写回磁盘后再释放内存。 ● 匿名⻚这部分内存没有实际载体不像⽂件缓存有硬盘⽂件这样⼀个载体⽐如堆、栈数据等。这部分内存很可能还要再次被访问所以不能直接释放内存它们回收的⽅式是通过 Linux 的 Swap 机制Swap 会把不常访问的内存先写到磁盘中然后释放这些内存。再次访问这些内存 时重新从磁盘读⼊内存就可以了。 在 4GB 物理内存的机器上申请 8G 内存会怎么样 这个问题要考虑三个前置条件 ● 操作系统是 32 位的还是 64 位的因为 32 位操作系统进程最多只能申请 3 GB ⼤⼩的虚拟 内存空间所以进程申请 8GB 内存的话在申请虚拟内存阶段就会失败 ● 申请完 8G 内存后会不会被使⽤程序申请的是虚拟内存如果没有被使⽤它是不会占⽤物理空间的。当访问这块虚拟内存后操作系统才会进⾏物理内存分配。 ● 操作系统有没有使⽤ Swap 机制如果没有开启 Swap 机制程序就会直接 OOM内存溢出简称OOM是指应⽤系统中存在⽆法回收的内存或使⽤的内存过多最终使得程序运⾏要⽤到的内存⼤于能提供的最⼤内存如果有开启 Swap 机制程序可以正常运⾏。 3.5 缓存区 缓存区溢出 C 语⾔使⽤运⾏时栈来存储过程信息。每个函数的信息存储在⼀个栈帧中包括寄存器、局部变量、参数、返回地址等。C 对于数组引⽤不进⾏任何边界检查因此对越界的数组元素的写操作会破坏存储在栈中的状态信息这种现象称为缓冲区溢出。缓冲区溢出会破坏程序运⾏也可以被⽤来进⾏攻击计算机如使⽤⼀个指向攻击代码的指针覆盖返回地址。 防范缓冲区溢出攻击的机制随机化、栈保护和限制可执⾏代码区域。 随机化 使⽤缓冲区溢出进⾏攻击需要知道攻击代码的地址。因此常⻅的防范⽅法有 1. 栈随机化程序开始时在栈上分配⼀段随机⼤⼩的空间 2. 地址空间布局随机化Address-Space Layout RandomizationASLR每次运⾏时程序的不 同部分包括代码段、数据段、栈、堆等都会被加载到内存空间的不同区域 但是攻击者依然可以使⽤蛮⼒克服随机化这种⽅式称为“空操作雪橇nop sled”即在实际的攻击代码前插⼊很⻓的⼀段 nop 指令序列执⾏这条指令只会移动到下⼀条指令。因此只要攻击者能够猜中这段序列的某个地址程序就会最终经过这段序列到达攻击代码。因此栈随机化和 ASLR 只能增加攻击⼀个系统的难度但不能完全保证安全。        栈保护 在发⽣缓冲区溢出、造成任何有害结果之前尝试检测到它。即在每个函数的栈帧的局部变量和栈状态之间存储⼀个随机产⽣的特殊的值称为⾦丝雀值canary。在恢复寄存器状态和函数返回之前程序检测这个⾦丝雀值是否被改变了如果是那么程序异常终⽌。 限制可执⾏代码区域 内存⻚的访问形式有三种可读、可写、可执⾏。只有编译器产⽣的那部分代码所处的内存才是可执⾏的其他⻚应当限制为只允许读和写。 3.6 I/O 模型 为什么 Redis 单线程模型依然效率很⾼多线程技术是为了充分利⽤ CPU 的计算资源适⽤于下层存储慢速的场景。⽽ redis 是纯内存操作读写速度⾮常快。所有的操作都会在内存中完成不涉及任何I/O 操作因此多线程频繁的上下⽂切换反⽽是⼀种负优化。Redis 选择基于⾮阻塞 I/O 的 I/O 多路复⽤机制在单线程⾥并发处理客户端的多个连接减少多线程带来的系统开销同时也有更好的可维护性⽅便开发和调试。 I/O 模型类型 I/O 同步和异步的区别在于将数据从内核复制到⽤户空间时⽤户进程是否会阻塞 I/O 阻塞和⾮阻塞的区别在于进程发起系统调⽤后是会被挂起直到收到数据后再返回、还是⽴即返 回成功或失败 I/O 模型类别阻塞IO、⾮阻塞IO、IO复⽤模型、信号驱动IO模型、异步IO ⽔平触发LTLevel Trigger当⽂件描述符就绪时会触发通知如果⽤户程序没有⼀次性把数据读/写完下次还会发出通知。select 只⽀持⽔平触发。 边缘触发ETEdge Trigger仅当描述符从未就绪变为就绪时通知⼀次之后不会再通知。 epoll ⽀持⽔平触发和边缘触发。当循环读取 recv 到没有数据时会出现 eagain 现象LT 是多线程时可能会出现默认跳过处理。 针对⽹络IO的操作可以分成两个阶段 ● 准备阶段阻塞等待数据是否可⽤是在内核进程中完成的 ● 操作阶段同步执⾏实际的IO调⽤数据从内核缓冲区拷⻉到⽤户进程缓冲区。 阻塞IO应⽤进程调⽤I/O操作时阻塞只有等待要操作的数据准备好并复制到应⽤进程的缓冲区中才返回 ⾮阻塞IO应⽤进程调⽤I/O操作导致该进程进⼊阻塞状态时该I/O调⽤返回⼀个错误。⼀般情况下应⽤进程需要利⽤轮询的⽅式来检测某个操作是否就绪。数据就绪后会等待数据复制到应⽤进程的缓冲区中以后才返回 IO复⽤多路IO共⽤同⼀个同步阻塞接⼝此时阻塞发⽣在 select/poll 的系统调⽤上⽽不是阻塞在实际的I/O系统调⽤上。IO多路复⽤的⾼级之处在于它能同时等待多个⽂件描述符⽽这些⽂件描述符其中的任意⼀个进⼊读就绪状态select等函数就可以返回。 信号驱动IO注册⼀个IO信号事件在数据可操作时通过信号通知线程。 异步IO: 应⽤进程通知内核开始⼀个异步I/O操作并让内核在整个操作包含将数据从内核复制到应⽤进程的缓冲区完成后通知应⽤进程。 I/O 复⽤模型 select 缺点 1. 性能开销⼤调⽤ select 时会陷⼊内核这时需要将参数中的 fd_set 从⽤户空间拷⻉到内核空 间。内核需要遍历传递进来的 fd_set 的每⼀位不管它们是否就绪 2. 能够监听的⽂件描述符数量太少受限于 sizeof(fd_set) 的⼤⼩在编译内核时就确定了且⽆法更改⼀般是 1024。 poll 和 select ⼏乎没有区别。poll 在⽤户态通过数组⽅式传递⽂件描述符在内核会转为链表⽅式存 储没有最⼤数量的限制 epoll select、poll 模型都只使⽤⼀个函数⽽ epoll 模型使⽤三个函数epoll_create、epoll_ctl监听事件 和 epoll_wait相当于select返回就绪数量。 特点 1. 使⽤红⿊树存储⽂件描述符集合 2. 使⽤队列存储就绪的⽂件描述符 3. 每个⽂件描述符只需在添加时传⼊⼀次之后调⽤ epoll_wait 不需要再次传递提⾼了效率。 4. 通过事件更改⽂件描述符状态。epoll_ctl 中为每个⽂件描述符指定了回调函数并在就绪时将其加⼊到就绪列表因此只需要判断就绪列表是否为空即可。 三者区别 1. select、poll 都是在⽤户态维护⽂件描述符集合因此每次需要将完整集合传给内核epoll 由操作系统在内核中维护⽂件描述符集合因此只需要在创建的时候传⼊⽂件描述符。 2. 当连接数较多并且有很多的不活跃连接时epoll 的效率⾼很多当连接数较少并且都⼗分活跃的情况下由于 epoll 需要很多回调因此性能可能低于其它两者。 3. epoll 不⽀持跨平台仅在 linux 上使⽤⽽ select 可以在windows 和 linux 同时使⽤。 Reactor 与 Proactor 模式 Reactor 是 ⾮阻塞 同步 ⽹络模式感知的是 就绪可读写 事件。在每次感知到有IO事件发⽣⽐如可读就绪事件后就需要应⽤进程主动调⽤ read ⽅法来完成数据的读取也就是要应⽤进程主动将socket 接收缓存中的数据读到应⽤进程内存中这个过程是同步的读取完数据后应⽤进程才能处理数据。 Proactor 是 异步 ⽹络模式 感知的是 已完成的读写 事件。在发起异步读写请求时需要传⼊数据缓 冲区的地址⽤来存放结果数据等信息这样系统内核才可以⾃动帮我们把数据的读写⼯作完成这⾥的读写⼯作全程由操作系统来做并不需要像 Reactor 那样还需要应⽤进程主动发起 read/write 来读写数据操作系统完成读写⼯作后就会通知应⽤进程直接处理数据。因此Reactor 可以理解为「来了事件操作系统通知应⽤进程让应⽤进程来处理」⽽ Proactor 可以理解为「来了事件操作系统来处理处理完再通知应⽤进程」。这⾥的「事件」就是有新连接、有数据可读、有数据可写的 I/O 事件这⾥的「处理」包含从驱动读取到内核以及从内核读取到⽤户空间。⽆论是 Reactor还是 Proactor都是⼀种基于「事件分发」的⽹络编程模式区别在于 Reactor 模式是基于「待完成」的 I/O 事件⽽ Proactor 模式则是基于「已完成」的 I/O 事件。 3.7 Copy on Write 写时复制Copy-on-writeCOW有时也称为隐式共享implicit sharing。COW 将复制操作推迟到第⼀次写⼊时进⾏在创建⼀个新副本只复制其⻚表时不会⽴即复制资源⽽是共享原始副本的资源当修改时再执⾏复制操作。通过这种⽅式共享资源可以显著减少创建副本时的开销节省资源。 实现原理 ● fork() 之后内核会把⽗进程的所有内存⻚都标记为只读 ● ⼀旦其中⼀个进程尝试写⼊某个内存⻚就会触发⼀个保护故障缺⻚异常此时会陷⼊内核 ● 内核将写⼊操作拦截并为尝试写⼊的进程创建这个⻚⾯的⼀个新副本恢复这个⻚⾯的可写权 限然后重新执⾏这个写操作这时就可以正常执⾏了 ● 内核会保留每个内存⻚⾯的引⽤数。每次复制某个⻚⾯后该⻚⾯的引⽤数减⼀如果该⻚⾯只有⼀个引⽤就可以跳过分配直接修改 3.8 Linux 启动过程 BIOS开机⾃检当打开电源后⾸先是BIOS开机⾃检按照BIOS中设置的启动设备通常是硬盘来启动。操作系统接管硬件以后⾸先读⼊ /boot ⽬录下的内核⽂件。 运⾏ initinit 进程是系统所有进程的起点没有这个进程系统中任何进程都不会启动。init 程序⾸先是需要读取配置⽂件 /etc/inittab。许多程序需要开机启动。它们在Windows叫做服务service在Linux就叫做守护进程daemon。init进程的⼀⼤任务就是去运⾏这些开机启动的程序。Linux启动时根据运⾏级别确定要运⾏哪些程序。Linux系统有7个运⾏级别(runlevel) ● 运⾏级别0系统停机状态系统默认运⾏级别不能设为0否则不能正常启动 ● 运⾏级别1单⽤户⼯作状态root权限⽤于系统维护禁⽌远程登陆 ● 运⾏级别2多⽤户状态(没有NFS) ● 运⾏级别3完全的多⽤户状态(有NFS)登陆后进⼊控制台命令⾏模式 ● 运⾏级别4系统未使⽤保留 ● 运⾏级别5X11控制台登陆后进⼊图形GUI模式 ● 运⾏级别6系统正常关闭并重启默认运⾏级别不能设为6否则不能正常启动 系统初始化执⾏ rc.sysinit 脚本它主要是完成⼀些系统初始化的⼯作rc.sysinit是每⼀个运⾏级别都要⾸先运⾏的重要脚本。它主要完成的⼯作有激活交换分区检查磁盘加载硬件模块以及其它⼀些需要优先执⾏的任务。 建⽴终端并登录这时系统环境基本已经设置好了各种守护进程也已经启动了。init接下来会打开6个终端以便⽤户登录系统。 常⽤命令 ⽂件管理 ● ls: 显示当前⽬录下⽂件。 ● pwd显示当前⼯作⽬录的绝对路径 ● cd 路径切换当前⼯作⽬录。路径可以为相对路径也可以为绝对路径 ● touch创建普通⽂件。 ● rm删除普通⽂件 rm -r删除⽬录⽂件 -r递归的意思 ● mkdir创建⽬录⽂件 ● rmdir删除空⽬录 ● mv剪切、重命名 ● cp拷⻉ cp -r ● chmod修改⽂件权限 ● tar 压缩⽂件 进程管理 ● ps 显示进程信息快照-e 显示所有进程。 -f 全格式 ● kill pid 结束进程 ● kill -9 pid 强制结束pid进程 ● kill -stop pid 挂起进程 ● 在后台运⾏进程 系统管理 ● uptime查询系统负载 ● top实时显示系统中各个进程的资源占⽤状况类似 于Windows 的任务管理器 ● free可以显示当前系统未使⽤的和已使⽤的内存数⽬还可以显示被内核使⽤的内存缓冲区 ⽹络通讯命令 ● ping ifconfig ● tcpdump抓包⼯具 ● netstat打印本地⽹卡接⼝上的全部连接、路由表信息、⽹卡接⼝信息。常⽤显示tcp连接 以及状态。 3.9 硬件结构 CPU 缓存⼀致性 解决⽅法 1. 写传播当某个 CPU 核⼼发⽣写⼊操作时需要把该事件⼴播通知给其他核⼼ 2. 事务的串⾏化只有保证了这个才能保障数据是真正⼀致的程序在各个不同的核⼼上运⾏的结 果也是⼀致的 MESI 协议 基于总线嗅探机制实现了事务串⾏化也⽤状态机机制降低了总线带宽压⼒这个协议就是 MESI 协议这个协议就做到了 CPU 缓存⼀致性。MESI 协议其实是 4 个状态单词的开头字⺟缩写分别是 ● Modified已修改 ● Exclusive独占。「独占」和「共享」的差别在于独占状态的时候数据只存储在⼀个 CPU 核⼼的 Cache ⾥⽽其他 CPU 核⼼的 Cache 没有该数据。另外在「独占」状态下的数据如果 有其他核⼼从内存读取了相同的数据到各⾃的 Cache 那么这个时候独占状态下的数据就会变成共享状态。 ● Shared共享。「共享」状态代表着相同的数据在多个 CPU 核⼼的 Cache ⾥都有所以当要更 新 Cache ⾥⾯的数据的时候不能直接修改⽽是要先向所有的其他 CPU 核⼼⼴播⼀个请求要求先把其他核⼼的 Cache 中对应的 Cache Line 标记为「⽆效」状态然后再更新当前 Cache ⾥⾯的数据。 ● Invalidated已失效 这四个状态来标记 Cache Line 四个不同的状态。 伪共享 多个线程同时读写同⼀个 Cache Line 的不同变量时⽽导致 CPU Cache 失效的现象称为伪共享 False Sharing。解决⽅法 ● Cache Line ⼤⼩字节对⻬利⽤宏以空间换时间的思想浪费⼀部分 Cache 空间从⽽换来性能的提升。 ● 字节填充如在类中增加占位的字符 ⼀致性哈希 ⼀致性哈希算法解决了分布式系统在扩容或者缩容时发⽣过多的数据迁移的问题。 ⼀致性哈希是指将「存储节点」和「数据」都映射到⼀个⾸尾相连的哈希环上如果增加或者移除⼀个节点仅影响该节点在哈希环上顺时针相邻的后继节点其它数据也不会受到影响。但是⼀致性哈希算法不能够均匀的分布节点会出现⼤量请求都集中在⼀个节点的情况在这种情况下进⾏容灾与扩容时容易出现雪崩的连锁反应。为了解决⼀致性哈希算法不能够均匀的分布节点的问题就需要引⼊虚拟节点对⼀个真实节点做多个副本。不再将真实节点映射到哈希环上⽽是将虚拟节点映射到哈希环上并将虚拟节点映射到实际节点所以这⾥有「两层」映射关系。引⼊虚拟节点后可以会提⾼节点的均衡度还会提⾼系统的稳定 性。所以带虚拟节点的⼀致性哈希⽅法不仅适合硬件配置不同的节点的场景⽽且适合节点规模会 ⽣变化的场景。
http://www.tj-hxxt.cn/news/233562.html

相关文章:

  • 网站的开发环境是什么wordpress免费主题企业
  • 青岛网站空间北京的网站设计公司
  • 建设培训网站建设南昌中企动力做的网站怎么样
  • 做移动网站开发学院网站怎么做的
  • wordpress一键优化网站优化关键词怎么做
  • 大学网站栏目建设网站规划设计内容有哪些
  • 怎样做公司网站建设南京专业网站制作公司
  • 重庆建设岗位培训网站移动互联网开发应聘
  • 网站制作与app开发哪个要难一点做网站的团队业绩怎么写
  • 利用别人域名做自己的网站seo是什么意思som
  • 万维网网站备案流程生态文明建设
  • 盐城网站建设建站wordpress七牛同步上传
  • 公司做网站要多长时间审核phpcms仿站
  • 济南公司建站城乡建设厅官方网站办事大厅
  • 12388网站建设管理情况做自适应网站制作
  • 学做网站好做吗沈阳 教育 公司 网站建设
  • 网站改版提交wordpress居中代码
  • 做系统正版win10系统下载网站开发公司与物业公司合同
  • 江苏建设主管部门网站更改wordpress程序站点网址
  • 网站返回按钮设计昆明网络营销线上广告
  • 网站上的广告怎么做网络营销成功的品牌
  • 用jsp做的网站有哪些兰州市网站
  • 做网站有名的公司服务器网站配置
  • pc营销型网站上海装修公司排名391
  • 电子商务网站建设具体方案wordpress 自定义feed
  • 济南做网站公司xywlcn网站建设实训分析总结
  • 亳州建设网站公司2010年4月江苏省03340网站建设与管理答案
  • wap网站用什么服务器做网站简单还是写程序
  • 那个网站可以找人做设计python语言入门
  • 网站建设的电话销售好做不建网站的几个公司