- 博客(12)
- 资源 (7)
- 收藏
- 关注
原创 C语言中的格式化输出
概述与其他语言相比,C语言提供的字符串处理的方式比简陋,格式化输出方式也相当简单,但进行基本的字符串处理已经足够了。我们常用的print函数是一个格式化处理经典的实现,这一类函数包括:printffprintfsprintfsnprintfvprintfvfprintfvsprintfvsnprintf上述函数共同的思路是根据format提供的格式要求将相应的变量转化成易读或者易解析的字符串,进而输出到文件、终端或者内存中。在一些情况下,为了易读或者易解析,我们需要提供一些相对整
2021-01-28 21:40:16
1898
原创 iscsi:IO操作流程(五)——IO完成处理
概述前面讲到,iscsi initiator实现过程采用了多级的异步模式,通过异步模式使IO操作阶段能够批量处理。这种异步机制的存在主要为了提升系统的吞吐量。从设计的角度,考虑采用异步操作机制的任务往往至少满足以下几个条件:并发能明显提升系统的IO吞吐。作为iscsi服务,其瓶颈点往往在磁盘上。但是多块磁盘可以并行进行读写,因此,IO的并发可以充分利用多个磁盘的带宽。并发可以避免由于某个I...
2018-11-21 10:21:14
2225
原创 iscsi:IO操作流程(四)
系统构建SCSI指令后,将调用scsi_host的queucommand操作,将指令下移到LLD设备层进行处理。scsi_host在iscsi协议中的角色scsi_host在系统中启动承上启下的作用。对上接收上层驱动设备转发的命令,对下连接下层的软件硬件,进行SCSI命令的进一步处理。scsi_host逻辑上是scsi指令从scsi协议层到scsi传输层之间的接口。
2017-11-30 20:05:29
2529
原创 iscsi:IO操作流程(二)
上次我们讨论了iscsi initiator IO操作需要经过的各个层次,以及每层所涉及的IO数据结构的变化。今天主要讨论IO如何形成SCSI指令并下发的。
2017-11-11 16:07:20
2185
原创 iscsi:IO操作流程(一)
从应用的视角,iscsi展现为一个块设备,即一块硬盘。在Linux操作系统中可以通过fdisk -l看到这块磁盘。iscsi协议所涉及的一系列的组件经过层层虚拟化,在多个层次上其操作与本地硬盘无异。这实际上是一个性能、可靠性、实现多个角度权衡的结果。
2017-11-09 08:53:04
3495
原创 rsyslog数据流分析
rysylog数据流如上图所示。 Linux系统调用syslog及内核的printk将日志分别写入到/dev/log和/dev/kmsg两个设备中。这两个设备在内存中开辟了一定的空间保存系统日志设备。rsyslog从两个设备中获取到日志进行分析和处理。 rsyslog通过input组件实现日志获取逻辑。除了从本地获取日志之外,也提供了通过网络获取日志的接口。这个将表示rsyslog可以收集来源于
2017-10-30 14:01:01
1235
原创 Linux系统中的CPU利用率
CPU利用率是系统性能监控的重要指标。CPU利用率是开发人员系统性能优化的重要参考指标。当CPU总体利用率过高时,开发过程中需要根据具体情况进行考虑,在从程序层面优化还是从部署层面优化。
2017-10-30 13:48:51
3707
原创 iscsi架构分析
iscsi协议是SCSI协议在TCP/IP网络的具体实现。它将SCSI的逻辑模型映射为TCP/IP通道上的具体实现。同时,也提供了相应的路径管理相应的能力,比如target的发现、连接的建立、会话的管理等方面的工作。
2017-10-22 23:25:58
2240
原创 grub2配置原理分析
BootLoader(引导程序)是系统启动之后第一个运行的程序。它的主要作用是加载操作系统并转入操作系统的入口,接下来的系统将由操作系统接管。随着技术发展,计算机系统的部署越来越复杂。从硬件角度,计算机引入了许多新的技术用以提供系统的性能,如SAS接口磁盘、NVMe接口磁盘、APIC等等,从软件角度,系统可能会安装在不同的文件系统上,甚至需要支持RAID、逻辑卷等底层的数据组织架构。复杂的环境对
2017-10-14 19:30:30
8054
1
原创 谈一谈mmap
部分设备驱动提供mmap功能。这个功能是一个非常用意思的调用。他可以使用户空间应用程序直接通过所映射的地址空间访问设备的内存空间。我们知道内核内的所有线程、变量共享同一个地址空间。因此,从更广泛的意义上讲,这是一个非常有意义的用户空间和内核空间共享数据的方式。
2017-09-28 21:57:11
842
原创 原子变量的原理与应用
当多个线程并发执行时,由于CPU随时被抢占,程序的执行就会具有不可预测性。CPU还需要处理各种外围设备的中断。这种不可预测性会变的更随机。我们所期望的程序执行结果有可能会变得不可预期。举例说明:考虑生产者消费者的问题,我们有一个变量counter,生产者增加conter的值,消费者减少counter的值。如下所示:1/*生产者操作P*/2…………3register1 = c
2017-09-15 21:37:24
4150
Linux 内核的文件预读
2009-06-22
深入理解Linux内核
2009-06-22
Object-Oriented Programming With ANSI-C
2009-06-19
Linux的SCSI设备实现分析
2009-03-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人