自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 165464651

153465465

2022-05-16 00:15:24 85

原创 123465

123

2022-02-24 15:51:50 121

原创 2021SC@SDUSC Linux内核—项目总结

项目总结通过我们小组的共同学习,我们已经基本掌握了Linux内核编译、Linux设备驱动程序的使用以及Linux内核中的密码子系统、 异步队列、内核多线程、模块等技术,掌握了核心代码dm-crypt的具体原理及实现。所以对于项目开始提出的问题:加密卡- -次只能处理一个sector (512字节)的数据,虽然利用I0技术提高了性能,但是对于更快的新加密卡,处理速度仍然很慢,想要使用异步和多线程机制完全发掘新加密卡的性能。通过这-学期的源码分析以及其他知识的学习,认为可以把队列中的相邻甚至不相邻的s

2021-12-27 16:36:33 386

原创 2021SC@SDUSC Linux内核—系统调用

系统调用一、什么是系统调用系统调用 跟用户自定义函数一样也是一个函数,不同的是 系统调用 运行在内核态,而用户自定义函数运行在用户态。由于某些指令(如设置时钟、关闭/打开中断和I/O操作等)只能运行在内核态,所以操作系统必须提供一种能够进入内核态的方式,系统调用 就是这样的一种机制。系统调用 是 Linux 内核提供的一段代码(函数),其实现了一些特定的功能,用户可以通过 int 0x80 中断(x86 CPU)或者 syscall 指令(x64 CPU)来调用 系统调用。二、进入系统调用

2021-12-27 16:25:40 88

原创 2021SC@SDUSC Linux内核—虚拟内存管理

Linux虚拟内存管理Linux的内存管理分为 虚拟内存管理 和 物理内存管理,本文主要介绍 虚拟内存管理 的原理和实现。在介绍 虚拟内存管理 前,首先介绍一下 x86 CPU 内存寻址的具体过程。x86 内存寻址Intel x86 CPU 把内存地址分为3种:逻辑地址、线性地址 和 物理地址。 逻辑地址: 也称为 虚拟地址,由 段寄存器:偏移量 组成(段寄存器 为16位,偏移量 为32位),偏移量 是应用程序能够直接操作的地址,比如在C语言中使用 & 操作符取得的变量地址就是 逻

2021-12-26 00:02:42 106

原创 2021SC@SDUSC Linux内核—物理内存管理

物理内存管理Linux的内存管理可分为物理内存管理和虚拟内存管理。所谓的虚拟内存就是指程序中使用的地址(32位系统可以使用4GB的虚拟内存地址),而物理地址是指计算机上真实安装的内存(例如我们安装了一条256MB的内存条,那么物理内存就只有256MB,但虚拟内存地址依然有4GB)。Linux内核需要通过一个映射关系才能把虚拟地址转换成物理地址,下面就来介绍Linux内存管理的细节。内存管理区Linux把物理内存划分为内存页进行管理, 一个内存页的大小为4KB, 所以在物理内存为1GB的电脑中可以

2021-12-25 23:54:55 447

原创 2021SC@SDUSC Linux内核—原生异步I/O(2)

提交异步 IO 操作提交异步 IO 操作是通过 io_submit 函数完成的,io_submit 需要提供一个类型为 iocb 结构的数组,表示要进行的异步 IO 操作相关的信息,我们先来看看 iocb 结构的定义:struct iocb { __u64 aio_data; // 用户自定义数据, 可用于标识IO操作或者设置回调函数 __u16 aio_lio_opcode; // IO操作类型, 如读(IOCB_CMD_PREAD)或者写(IOCB_CMD_...

2021-12-23 23:51:55 550

原创 2021SC@SDUSC Linux内核—原生异步I/O(1)

Linux 原生异步 IO什么是异步 IO?异步 IO:当应用程序发起一个 IO 操作后,调用者不能立刻得到结果,而是在内核完成 IO 操作后,通过信号或回调来通知调用者。异步 IO 与同步 IO 的区别如 图1 所示:从上图可知,同步 IO 必须等待内核把 IO 操作处理完成后才返回。而异步 IO 不必等待 IO 操作完成,而是向内核发起一个 IO 操作就立刻返回,当内核完成 IO 操作后,会通过信号的方式通知应用程序。Linux 原生 AIO 原理Linux Nati

2021-12-12 15:19:22 102

原创 2021SC@SDUSC Linux内核—直接I/O

缓存I/O一般来说,当调用 open() 系统调用打开文件时,如果不指定 O_DIRECT 标志,那么就是使用缓存I/O来对文件进行读写操作。我们先来看看 open() 系统调用的定义:int open(const char *pathname, int flags, ... /*, mode_t mode */ );下面说明一下各个参数的作用: pathname:指定要打开的文件路径。 flags:指定打开文件的标志。 mode:可选,指定打开文件的权限。 其中

2021-12-05 19:39:36 87

原创 2021SC@SDUSC Linux内核—共享内存

共享内存在Linux系统中,每个进程都有独立的虚拟内存空间,也就是说不同的进程访问同一段虚拟内存地址所得到的数据是不一样的,这是因为不同进程相同的虚拟内存地址会映射到不同的物理内存地址上。但有时候为了让不同进程之间进行通信,需要让不同进程共享相同的物理内存,Linux通过 共享内存 来实现这个功能。下面先来介绍一下Linux系统的共享内存的使用。共享内存使用1. 获取共享内存要使用共享内存,首先需要使用 shmget() 函数获取共享内存,shmget() 函数的原型如下:int

2021-11-28 21:12:25 275

原创 2021SC@SDUSC Linux内核—信号处理机制(2)

内核触发信号处理函数上面介绍了怎么发生一个信号给指定的进程,但是什么时候会触发信号相应的处理函数呢?为了尽快让信号得到处理,Linux把信号处理过程放置在进程从内核态返回到用户态前,也就是在 ret_from_sys_call 处:// arch/i386/kernel/entry.S​ENTRY(ret_from_sys_call) ...ret_with_reschedule: ... cmpl $0, sigpending(%ebx) // 检查进程的sigp

2021-11-21 20:03:16 129

原创 2021SC@SDUSC Linux内核—信号处理机制(1)

什么是信号信号本质上是在软件层次上对中断机制的一种模拟,其主要有以下几种来源: 程序错误:除零,非法内存访问等。 外部信号:终端 Ctrl-C 产生 SGINT 信号,定时器到期产生SIGALRM等。 显式请求:kill函数允许进程发送任何信号给其他进程或进程组。 目前 Linux 支持64种信号。信号分为非实时信号(不可靠信号)和实时信号(可靠信号)两种类型,对应于 Linux 的信号值为 1-31 和 34-64。信号是异步的,一个进程不必通过任何操作来等待信号的到

2021-11-14 16:17:24 219

原创 2021SC@SDUSC Linux内核—等待队列

等待队列原理与实现当进程要获取某些资源(例如从网卡读取数据)的时候,但资源并没有准备好(例如网卡还没接收到数据),这时候内核必须切换到其他进程运行,直到资源准备好再唤醒进程。waitqueue (等待队列) 就是内核用于管理等待资源的进程,当某个进程获取的资源没有准备好的时候,可以通过调用 add_wait_queue() 函数把进程添加到 waitqueue 中,然后切换到其他进程继续执行。当资源准备好,由资源提供方通过调用 wake_up() 函数来唤醒等待的进程。等待队列初始化要使用

2021-11-06 10:45:52 231

原创 2021SC@SDUSC Linux内核—并发同步

学习

2021-10-30 16:21:31 67

原创 2021SC@SDUSC Linux内核—O(1)调度算法

2021-10-23 12:17:08 91

原创 2021SC@SDUSC Linux内核—进程调度

2021-10-16 18:03:33 91

原创 2021SC@SDUSC Linux内核—进程管理

进程程序是指储存在外部存储(如硬盘)的一个可执行文件, 而进程是指处于执行期间的程序, 进程包括 代码段(text section) 和 数据段(data section), 除了代码段和数据段外, 进程一般还包含打开的文件, 要处理的信号和CPU上下文等等.进程描述符Linux进程使用 struct task_struct 来描述(include/linux/sched.h), 如下:struct task_struct { /* * offsets of these

2021-10-09 23:46:19 73

原创 2021SC@SDUSC Linux内核中的dm-crypt模块的异步IO改造

一、项目背景某公司研发了一款高速加密卡(对称加密10Gbit/s以上),可以配合Linux内核中的密码子系统和dm-crypt模块实现磁盘分区加密等应用,做企业保密存储服务器。实际使用中发现:由于dm-crypt模块的循环结构每次处理512个字节(一个sector),导致无法发挥加密卡的全部性能,分析发现需要在dm中使用scatter/gather高速IO技术以提高性能。在Linux内核中修改代码,具有极大挑战性。这是本项目一期工作,已经完成,实现了IO速度从80M字节提高到约1G字节每秒的跃进,达到了

2021-09-30 17:32:31 161

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除