计算机组成原理-万字长文

四、计算机组成原理

4.1 衡量储存器使用哪几个指标?

  • 速度、容量、单位成本
  • 外存、内存、cache

4.2 I/O

4.2.1 定义

  • 一个进程虽然任意时刻只能处理一个请求,但是处理每个请求事件时,耗时控制在1毫秒以内,这样1秒内就可以处理上前个请求,把事件拉长来看,多个请求复用了一个进程,这就是多路复用,这个思量类似于一个cpu并发多个进程,所以也叫时分多路复用。这种机制可以显著提高系统的性能和资源利用率,减少不必要的线程切换和上下文切换开销。
  • IO多路复用时通过一个线程来管理多个IO通道,避免为每个通道创建独立线程或进程的开销
  • 常见的IO多路复用机制包括select、poll和epoll:
    • select:最早的IO多路复用函数,可以监视多个文件描述符。但它有一些限制,如文件描述符数量上限为1024。
    • poll:类似于select,但没有文件描述符数量的限制。
    • epoll:Linux特有的IO多路复用机制,性能最好。它使用事件驱动的方式,只关注活跃的文件描述符。
    • kqueue:BSD系统的IO多路复用机制,类似于epoll。

作者:青玉白露
链接:https://www.nowcoder.com/discuss/646089968237957120
来源:牛客网

4.2.2 I/O总线包括那几类?

  • 数据总线
  • 设备选择总线
  • 状态总线
  • 命令总线

4.2.3 优点

  • 减少系统开销:不必创建过多的进程/线程
  • 提高性能和可伸缩性:可以有效的处理大量并发请求,提高性能和可伸缩性
  • 节省资源:减少内存和系统资源的消耗
  • 支持非阻塞IO:允许在等待数据准备好继续执行其他任务
  • 简化程序结构:不需要处理复杂的线程管理和同步问题

4.2.4 应用场景

  • 在许多网络应用中,如web服务器、聊天应用、实时游戏等,需要同时处理大量连接请求或数据传输,IO多路复用技术可以显著提高这些应用的性能
  • 在高性能服务器中,如redis、nginx等,IO多路复用技术被广泛应用,以支持更多的并发连接请求。

4.2.5 实现方式select/poll/epoll

select/poll/epoll如何获取网络事件

再获取事件时,先把所有连接传给内核,再由内核返回产生了事件的连接,然后在用户态中处理这些连接对应的请求即可。

select/poll

实现方式

  1. 将已连接的socket都放到一个文件描述符集合
  2. 调用select函数将文件描述符集合拷贝到内核
  3. 让内核来检查是否由网络事件产生
    • 检查方式很暴力:遍历文件描述符集合的方式,当检查到有事件产生后,将次socket标记为可读或可写
  4. 接着把整个文件描述符集合拷贝到用户态里面,然后用户态还需要再使用遍历的方法找到可读或可写的socket

特性

  1. 使用固定长度的bitsmap,表示文件描述符的集合,而且支持的文件描述符的个数时优先组织的,比如在linux中,默认最大值为1024;
  2. 与之对比的是poll:不在使用bitsmap来存储所关注的文件描述符,而使用·1动态数组,以链表的形式来组织,突破了select文件描述符个数的限制
  3. select和poll没有本质区别,都是使用线性结构存储进程关注的socket集合,因此都需要遍历文件描述符集合来找到可读或可写的socket,时间复杂度为0(n),而且也需要在用户态和内核态之间拷贝文件描述符集合,这种方式随着并发数上来,性能的损耗会呈指数级增长

epoll

用法

  • 先用epoll_create 创建一个 epol l对象 epfd,再通过 epoll_ctl 将需要监视的 socket 添加到epfd中,最后调用 epoll_wait 等待数据

epoll 通过两个方面,很好解决了 select/poll 的问题
第一点:红黑树的引入

  1. epoll在内核中使用红黑树跟踪进程中所有待检测的文字描述符
  2. 把需要监控的socket通过**epoll_stl()**函数加入到内核的红黑树里(红黑树的增删改的时间复杂度为0(logn))
  3. 所以有了红黑树的维护,每次只需要传入一个待检测的socket,减少了内核和用户空间大量数据拷贝和内存分配

第二点:
4. epoll使用事件驱动机制,内核里维护了一个链表来记录就绪事件,当某个socket有事件发生时,通过回调函数内核会将其加入到就绪事件列表中
5. 当用户吊用**epoll_wait()**时,只会返回有事件发生的文件描述符的个数,不需要像select那样轮询扫描整个socket的集合。

边缘触发和水平触发

epoll支持两种事件触发方式,分别是边缘触发和水平触发

  1. 边缘触发模式,当被监控的socket描述符上有可读事件发生时,服务器端只会从epoll_wait中苏醒一次,即使进程没有调用read函数从内核读取数据,也依然只苏醒一次,因此我们程序要保证一次性将内核缓冲区的数据读取完。所以一般和非阻塞IO搭配使用
  2. 使用水平触发模式时,当被监控的socket上有可读事件发生时,服务器会不断的从epoll_wait中苏醒,知道内核缓冲区数据被read函数读完才结束,目的是告诉我们有数据要读取

4.3 中断

什么是中断?

  • 计算机在执行程序过程中,当出现异常清空或特殊请求时,计算机停止现行程序的运行,转去处理
    这些异常清空或特殊请求,处理结束后,再返回现行程序的间断处,继续执行原程序,即为中断。

中断流程包括

  • 保护现场
  • 中断服务
  • 恢复现场
  • 中断返回

CPU 什么时候响应中断?

  • 当前指令执行完毕之后,CPU 会发出中断查询信号。也就是说中断一定是发生在每条指令结束之后,不可能在执行过程中进行中断

4.4 DMA

  • 直接内存访问,在主存和 I/O 设备之间建立独立的总线连接

DMA 的工作

  • 预处理
  • 数据传输
  • 后处理

4.5 说说都有哪些指令集,设计思想是什么

  • RISC:精简指令集
  • SISC:复杂指令集

4.6 双击一个程序的背后细节

程序运行的时候,是操作系统把它所需要的指令和数据从硬盘加载到内存中。进入内存之后,CPU按照冯诺依曼的思想,从内存里面按顺序去执行指令,直到这个程序所有的指令都执行完为止。
步骤如下:

找到并执行可执行文件

  1. 用户操作:
  • 当用户双击桌面、开始菜单或文件浏览器中的一个可执行文件(如.exe文件)时,操作系统会捕捉到这一操作。
  1. 文件路径解析:
  • 操作系统首先解析双击的快捷方式或文件路径,找到实际的可执行文件位置。
  1. 调用Explorer.exe:
  • 通常情况下,Windows操作系统中的Explorer.exe进程负责处理这类用户操作。Explorer.exe会调用CreateProcess()函数来创建一个新的进程对象,用于执行被双击的可执行文件。

进程创建过程

  1. 映射exe文件到内存
  • 操作系统为新的进程分配一块用户独享的内存空间(如10000到7FFEFFFF),并根据PE(Portable Executable)文件的ImageBase属性将其映射到这块内存的指定位置。
  1. 创建内核对象EPROCESS:
  • 每一个进程都有一个对应的EPROCESS结构,该结构存放在共享的内核分区中。EPROCESS包含了进程的所有状态信息,如内存管理、句柄表、安全信息等。
  1. 初始化进程地址空间:
  • 进程地址空间包括代码段、数据段、堆、栈等区域。操作系统会创建相应的页表项,以映射这些区域到进程的虚拟地址空间。
  1. 映射系统动态链接库(ntdll.dll):
  • ntdll.dll是Windows操作系统提供的一个关键动态链接库,包含了操作系统内核提供的API。这个库会被映射到每个进程的地址空间中,以便进程能够调用操作系统的功能。
  1. 创建初始线程(EThread):
  • 进程必须至少拥有一个线程才能执行。操作系统会为新进程创建一个初始线程,并为其分配栈空间和执行环境。
  1. 加载必要的DLL和库:
  • 根据PE文件中的导入表,操作系统会加载并映射所有必需的DLL和库到进程的地址空间中。这些DLL和库可能包括用户自定义的库以及系统库。
  1. 开始执行初始线程:
    一旦所有必要的资源都已准备就绪,初始线程开始执行。这通常意味着执行可执行文件中的入口点函数(如main或WinMain函数)。

后续操作

  1. 资源分配和调度:
  • 操作系统会根据进程的优先级和需求为其分配CPU时间、内存等资源,并进行调度。
  1. 进程间通信:
  • 如果需要,进程可以通过各种机制(如管道、消息队列、共享内存等)与其他进程进行通信。
  1. 进程终止:
  • 当进程完成任务或用户请求终止时,操作系统会回收其占用的资源,并销毁相关的内核对象。

4.7 路由器和交换机的区别

路由器和交换机都是计算机网络中的设备,但是它们的功能不同。

  1. 路由器是连接因特网中各局域网和广域网的设备,用来做网间连接,也就是用来连接不同网络的。
  2. 而交换机是一个扩大网络的器材,能为子网络中提供更多的连接端口,以便连接更多的计算机。
    层级
  3. 普通的交换机一般工作在OSI七层模型的第二层·数据链路层
  4. 而路由器则工作在第三层·网络层。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lweiwei@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值