【DragonOS】PCI总线子系统
PCI总线,全称为Peripheral Component Interconnect,即外围组件互连,是一种计算机总线的标准接口,用于连接计算机主板和外围设备,如显卡、网卡、声卡等。PCI总线由Intel公司提出,并由PCI Special Interest Group (PCISIG) 负责制定相关规范。
PCI总线的主要特点包括:
高带宽:PCI总线支持32位或64位的数据传输,工作频率为33MHz,最大数据传输率可达132MB/s(32位)或264MB/s(64位)。
独立于CPU:PCI总线不依赖于特定的处理器,支持多种处理器架构。
并行操作能力:PCI总线允许多个设备并行操作,提高了数据传输效率。
即插即用:PCI设备支持即插即用,方便用户使用。
中断共享:PCI总线支持中断共享,允许多个设备共享同一中断资源。
PCI总线的架构包括HOST主桥、PCI插槽、PCI设备和PCI桥接器。HOST主桥负责连接CPU和内存总线与PCI总线,PCI插槽用于插入外部设备,PCI设备通过插槽与系统通信,PCI桥接器用于连接不同的PCI总线或其他总线。
PCI总线的工作原理涉及初始化、数 ...
引导加载程序
什么是引导加载程序?引导加载程序(Boot Loader)是计算机系统中的一个软件,它负责在计算机启动时加载操作系统内核,并将控制权交给内核。引导加载程序通常存储在启动设备的引导扇区(Boot Sector)中,如硬盘、固态硬盘、光盘等。它的主要功能包括初始化硬件、加载内核映像、设置内核运行环境等。
GRUB的一个重要特性就是灵活性;GRUB能够识别文件系统和内核可执行文件格式,因此你可以按照自己的喜好加载任意一个操作系统,而不必记录内核在磁盘上的物理位置。因此,你可以通过指定内核文件的名称以及内核所在的驱动器和分区来加载内核。
GRUD2GRUB得到了扩展以满足许多需求,但很快它就变得明显,其设计无法跟上对其所做的扩展,我们达到了这样的地步:如果不破坏现有功能,就很难进行任何进一步的更改。大约在2002年,Yoshinori K. Okuji开始开发PUPA(GNU GRUB的初步通用编程架构),旨在重新编写GRUB的核心,使其更干净、更安全、更健壮、更强大。PUPA最终被重新命名为GRUB 2,而原始版本的GRUB被重新命名为GRUB Legacy。
multiboot2Multi ...
Rust语言进阶
所有权、引用和借用生命周期闭包在编程语言中,闭包(Closure)是一个重要的概念,它指的是一个函数或方法,它记住了创建时的环境,即使在其定义的作用域之外也能访问这些环境的变量。简单来说,闭包就是能够读取或修改另一个函数内的变量的函数。
在 Rust 语言中,闭包是一种可以捕获其环境中变量的匿名函数。Rust 中的闭包有三种类型,分别是:
FnOnce:这种类型的闭包可以被调用一次,并且可以获取(即获取所有权)其环境中的变量。
FnMut:这种类型的闭包可以被多次调用,并且可以可变地借用(即修改)其环境中的变量。
Fn:这种类型的闭包也可以被多次调用,但是它只能不可变地借用其环境中的变量。
闭包在 Rust 中非常有用,因为它们可以作为参数传递给其他函数,或者作为函数的返回值。这使得闭包在实现回调函数、事件处理器、迭代器和闭包表达式等方面非常有用。
闭包的语法结构通常如下:
1|参数列表| 表达式
例如,一个简单的闭包可以这样定义:
1let add_one = |x: i32| x + 1;
这个闭包接受一个 i32 类型的参数 x,并返回 x + 1 的结果。你可以像调用普通函 ...
IBM俱乐部组织架构调整以及活动设想方案
俱乐部简介todo!()
俱乐部组织架构123456789101112131415graph TD;Z[指导老师] subgraph 主席团 A[总负责人] B[技术部部长] C[组织部部长] D[宣传部部长] end Z-->A A-->B A-->C A-->D B-->|带领和管理|F[技术部成员] C-->|带领和管理|G[组织部成员] D-->|带领和管理|H[宣传部成员]
职能介绍
职能只是锻炼和发挥你长处的机会,无论是否有职务,大家都有同等机会享受俱乐部的资源,但相对来说对于俱乐部的发展更重要。
下分三个部门,技术部、宣传部和组织部。每个部门有1到2位部长,5到6个成员。招新总人数15人左右,可以小范围增加。
技术部技术部致力于提升俱乐部内部的整体技术水平。负责组织开展俱乐部内部的技术交流活动。包括但不限于开展内部的技术交流活动,组织项目组队,举办内部比赛,打卡沙龙等内容的组织和策划。
宣传部宣传部致力于让俱乐部在软件 ...
区块链技术与应用
课程报告;
区块链技术与应用区块链关键技术区块链架构数据层、网络层、共识层、激励层、合约层、应用层
区块结构
Merkle树通过Merkle树如何对区块中的交易进行验证?做哈希的次数是log2(n),n是交易数量,次数多了,速度慢了,但是校验的速度更快。
非对称加密分组对称加密算法
DES
AES
IDEA非对称加解密算法对比:对称加密算法只有一个密钥,非对称加密算法有两个密钥,公钥和私钥。
RSA,基于大数质因子分解很困难的特性
ECC(椭圆曲线加密算法)
SM2(国密算法),基于椭圆曲线离散对数问题,加密强度高于RSA系列优缺点:非对称加密算法加密速度慢,但是安全性高,对称加密算法加密速度快,但是安全性低。混合加密对称加密算法加密数据,非对称加密算法加密对称加密算法的密钥。先用非对称加密算法协商出一个临时的对称加密密钥(也称会话密钥),然后用对称加密算法加密数据。典型的应用场景是HTTPS。数字签名
数字证书鲍勃和爱丽丝的故事鲍勃有两把钥匙,一把是公钥,另一把是私钥。
鲍勃把公钥送给他的朋友们——帕蒂、道格、苏珊——每人一把。
苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密 ...
【DragonOS】redis服务测试
redis-benchmark 是一个非常有用的工具,可以帮助你测试 Redis 服务器的性能。然而,它并不是专门设计用于长时间稳定性测试的工具。redis-benchmark 更适合用于短时间内的高负载测试。如果你想测试 Redis 服务在 1000 QPS 下稳定运行 24 小时,建议使用更适合长时间测试的工具,如 redis-benchmark 配合脚本,或者使用其他负载测试工具如 Apache JMeter 或 wrk。
使用 redis-benchmark 和脚本进行长时间测试你可以编写一个简单的脚本,循环调用 redis-benchmark,并记录每次测试的结果。以下是一个示例脚本:
1234567891011121314151617181920212223#!/bin/bash# 目标 QPSTARGET_QPS=1000# 测试持续时间(秒)DURATION=$((24 * 60 * 60))# redis-benchmark 参数REDIS_BENCHMARK_CMD="redis-benchmark -t set,get -n $((TARGET_QPS ...
【DragonOS】文件系统和块设备
什么是块设备https://olegkutkov.me/2020/02/10/linux-block-device-driver/
块设备vs字符设备字符设备:以字符为单位进行I/O操作,如键盘、鼠标、串口等块设备:以块为单位进行I/O操作,如硬盘、U盘等
读写单元:字符设备是字节流,块设备是块
访问方式:字符设备是顺序访问,块设备是随机访问
缓存:字符设备不缓存,块设备缓存设备驱动设备驱动表磁盘分区MBR和GPT都是硬盘分区表,在硬盘分区表之后才是我们日常使用的文件系统比如NTFS,FAT32,EXT等。虽然现在MBR已经是一个不常用的硬盘分区表了,但是GPT为了兼容老的硬盘分区表所以在GPT的结构头部加入了MBR。
MBR的组成硬盘首一个扇区存放MBR表,由4个部分组成,分别是主引导记录(Master Boot Record)、数据区、分区表(包含4个分区项)以及结束标志。
在下面表格中展示了这4个部分的偏移位置和简介:
Master Boot Record 是硬盘分区表的引导程序和数据区,一共占用446个字节,BIOS 读取并执行这段代码,如果被破坏系统就无法读取到硬盘上的 ...
微服务
软件架构单体 SOA 微服务
单体架构:将所有功能模块集成在一个应用中,开发、部署、维护都比较简单,但是随着业务的发展,单体应用会变得越来越庞大,开发效率低下,部署困难,维护成本高。
SOA 架构:面向服务的架构,将应用拆分成多个服务,每个服务都是一个独立的功能模块,服务之间通过接口进行通信,服务之间的耦合度低,易于维护和扩展。
微服务架构:微服务架构是 SOA 架构的一种演进,将服务拆分的更细,每个服务都是一个独立的进程,服务之间通过 HTTP、RPC 等方式进行通信,每个服务都有自己的数据库,服务之间的耦合度更低,易于部署和扩展。一句话解释:微服务架构是一种将应用程序拆分为小而自治的服务的软件架构模式。每个服务专注于执行特定的业务功能,并通过轻量级的通信机制进行交互。它提供了独立开发、可扩展和技术多样性的优势。
在微服务架构中,应用程序被拆分为一组小型、独立的服务,每个服务都专注于执行特定的业务功能。这些服务之间通过轻量级的通信机制进行交互,例如使用 HTTP/REST、消息队列或者事件总线。
每个微服务都有自己的代码库、数据库和部署单元。它们可以使用不同的编程语言和技术栈,根 ...
面经
后端开发面经问题
Q:请描述 select、poll、epoll 这三种IO多路复用技术的执行原理
IO 多路复用(IO Multiplexing)是一种在单个线程中同时监控多个文件描述符(如网络套接字、文件等)的方法。当其中任何一个文件描述符变得可读、可写或发生错误时,程序可以进行相应的处理。IO 多路复用的主要目的是提高系统的并发处理能力,尤其是在网络编程中。
常见的 IO 多路复用机制 select:最早的 IO 多路复用机制,支持监控多个文件描述符,但存在文件描述符数量限制和性能问题。 poll:类似于 select,但没有文件描述符数量限制,性能稍有改善。 epoll:Linux 特有的 IO 多路复用机制,性能优于 select 和 poll,适用于大规模并发连接。 kqueue:FreeBSD 和 macOS 上的 IO 多路复用机制,类似于 epoll。
A:select、poll、epoll 都是 IO 多路复用的机制,都是通过一个线程来监听多个文件描述符的可读、可写、异常等事件。select 是最早的实现,poll 是对 select 的改进,epoll ...