操作系统
文章平均质量分 62
dwx2046
这个作者很懒,什么都没留下…
展开
-
Linux 中的零拷贝技术,第 1 部分
http://www.ibm.com/developerworks/cn/linux/l-cn-zerocopy1/index.html引言传统的 Linux 操作系统的标准 I/O 接口是基于数据拷贝操作的,即 I/O 操作会导致数据在操作系统内核地址空间的缓冲区和应用程序地址空间定义的缓冲区之间进行传输。这样做最大的好处是可以减少磁盘 I/O 的操作,因为如果所请求的数转载 2016-03-23 17:44:14 · 335 阅读 · 0 评论 -
linux brk、sbrk、mmap和munmap系统调用
sbrk/brk重新指定数据段的结束位置。sbrk(增量),增量可正可负,也可以是0,,都返回原来的数据段结束地址,失败返回-1,。brk(地址),返回0或者-1。头文件。sbrk(0)可以取得当前结束地址。没有使用的虚拟内存地址,操作系统就没有映射到物理内存,如果试图访问会差生段错误。指定新的结束位置后如果有整个内存页被空闲出来,这一页就立即被解除映射。#include #原创 2016-08-01 10:46:52 · 3125 阅读 · 0 评论 -
mmap与直接IO(read、write)的效率比较
不能简单的说哪个效率高,要看具体实现与具体应用。无论是通过mmap方式或read/write方式访问文件在内核中都必须经过两个缓存:一个是用address_space来组织的以页为基础的缓存;一个是以buffer来组织的缓存,但实际上这两个缓存只是同一个缓冲池里内容的不同组织方式。当需要从文件读写内容时,都经过 address_space_operation中提供的函数也就是说路径是一致的。如原创 2016-08-03 16:03:51 · 11287 阅读 · 0 评论 -
linux系统端口占用和close-on-exec机制
一直以来,在处理linux服务器的过程中,经常会遇到一个问题,有时候kill掉进程之后,端口被占用,新的进程一直起不来,等待很久也不能启动新进程,总是提示端口被占用,只有重启机器才能恢复正常,这个简直是个灾难,查了一些资料,了解了如何查看端口占用情况和处理方法。1、使用netstat命令查看端口占用情况。 2、我们还需要知道是什么程序占用,加上-p参数原创 2016-07-30 12:00:04 · 1607 阅读 · 0 评论 -
IO模型(同步,异步,阻塞,非阻塞)
在文章中一共比较了五种IO Model: blocking IO 阻塞IO nonblocking IO 非阻塞IO IO multiplexing IO复用 signal driven IO 信号驱动式 asynchronous IO 异步IO由于信号驱动式在实际中并不常用,所以我这只提及剩下的四种IO Model。这个问题在不同的背景之下讨论的结果不一致,本文讨论的背景是Linux环境下的n原创 2016-06-20 21:11:32 · 491 阅读 · 0 评论 -
自旋锁 互斥锁 读写锁 递归锁
互斥锁(mutexlock):最常使用于线程同步的锁;标记用来保证在任一时刻,只能有一个线程访问该对象,同一线程多次加锁操作会造成死锁;临界区和互斥量都可用来实现此锁,通常情况下锁操作失败会将该线程睡眠等待锁释放时被唤醒自旋锁(spinlock):同样用来标记只能有一个线程访问该对象,在同一线程多次加锁操作会造成死锁;使用硬件提供的swap指令或test_and_set原创 2016-04-06 17:13:03 · 5840 阅读 · 0 评论 -
单核,多核CPU的原子操作
一. 何谓"原子操作":原子操作就是: 不可中断的一个或者一系列操作, 也就是不会被线程调度机制打断的操作, 运行期间不会有任何的上下文切换(context switch).二. 为什么关注原子操作?1. 如果确定某个操作是原子的, 就不用为了去保护这个操作而加上会耗费昂贵性能开销的锁. - (巧妙的利用原子操作和实现无锁编程)2. 借助原子操作可以实现互斥锁(mutex).原创 2016-04-19 22:09:16 · 3166 阅读 · 0 评论 -
Tomasulo算法
Tomasulo算法:为IBM 360/91设计的,它采用的是寄存器重命名的方法来消除寄存器数据流之间的假相关,即用虚拟寄存器集代替真实的FPR,虚拟寄存器集在tomasulo算法中由每一功能单元所带的保留站(reservation station)、取数缓冲区(load buffers)和存数缓冲区(store buffers)组成。 Tomasulo算法的三段1.Issue―从原创 2016-05-11 22:37:50 · 19327 阅读 · 2 评论 -
linux各文件夹的作用
/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示 /lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件 /sbin 系统管理命令,这里存放的是系统管理员使用的管理程序转载 2016-04-11 14:19:08 · 306 阅读 · 0 评论 -
linux进程调度策略
linux内核的三种主要调度策略:1,SCHED_OTHER 分时调度策略, 2,SCHED_FIFO实时调度策略,先到先服务 3,SCHED_RR实时调度策略,时间片轮转 实时进程将得到优先调用,实时进程根据实时优先级决定调度权值。分时进程则通过nice和counter值决定权值,nice越小,counter越大,被调度的概率越大,也就是曾经使用了cpu转载 2016-04-10 20:51:18 · 394 阅读 · 0 评论 -
clock()函数在多线程时的问题
clock()函数的功能: 这个函数返回从“开启这个程序进程”到“程序中调用C++ clock()函数”时之间的CPU时钟计时单元(clock tick)数当程序单线程或者单核心机器运行时,这种时间的统计方法是正确的。但是如果要执行的代码多个线程并发执行时就会出问题,因为最终end-begin将会是多个核心总共执行的时钟嘀嗒数,因此造成时间偏大。clock有三个问题:1)如果超过一原创 2016-04-09 15:57:12 · 5625 阅读 · 1 评论 -
linux中man 2与man 3区别
在查询stat系统调用的时候发现这个问题,记录在此,发现查询到的信息不是系统调用信息,使用man 2即可1、Standard commands (标准命令)2、System calls (系统调用)3、Library functions (库函数)4、Special devices (设备说明)5、File formats (文件格式)6、Games a原创 2016-04-12 15:07:01 · 4398 阅读 · 0 评论 -
Segmentation fault 问题浅谈
http://blog.chinaunix.net/uid-24347760-id-1989555.html今天调试程序时遇到了一个问题,当我用GDB调试程序时出现了Segmentation fault,以前没有遇到过,最后查看资料,有点明白了。 出现了Segmentation fault,基本上的原因是,非法的内存访问。例如数组的越界,在循环操作时循环变量的控制问题,也有字转载 2016-03-25 13:29:00 · 646 阅读 · 0 评论 -
ps aux命令显示的状态列中的Ss+,Rsl,R+,S<sl都是什么意思呢?
D 不可中断 Uninterruptible sleep (usually IO) R 正在运行,或在队列中的进程 S 处于休眠状态 T 停止或被追踪 Z 僵尸进程 W 进入内存交换(从内核2.6开始无效) X 死掉的进程 N 低优先级 L原创 2016-04-06 17:36:55 · 1892 阅读 · 0 评论 -
Linux 中直接 I/O 机制的介绍
http://www.ibm.com/developerworks/cn/linux/l-cn-directio/直接 I/O 的动机在介绍直接 I/O 之前,这一小节先介绍一下为什么会出现直接 I/O 这种机制,即传统的 I/O 操作存在哪些缺点。什么是缓存 I/O (Buffered I/O)缓存 I/O 又被称作标准 I/O,大多数文件系统的默认 I/转载 2016-03-23 17:51:13 · 308 阅读 · 0 评论 -
Linux 中的零拷贝技术,第 2 部分
http://www.ibm.com/developerworks/cn/linux/l-cn-zerocopy2/index.htmlLinux 中的直接 I/O如果应用程序可以直接访问网络接口存储,那么在应用程序访问数据之前存储总线就不需要被遍历,数据传输所引起的开销将会是最小的。应用程序或者运行在用户模式下的库函数可以直接访问硬件设备的存储,操作系统内核除了进行必要的虚拟转载 2016-03-23 17:46:10 · 409 阅读 · 0 评论 -
Linux 互斥锁、原子操作实现原理
在Linux下,信号量和线程互斥锁的实现都是通过futex系统调用。futex(快速用户区互斥的简称)是一个在Linux上实现锁定和构建高级抽象锁如信号量和POSIX互斥的基本工具。它们第一次出现在内核开发的2.5.7版;其语义在2.5.40固定下来,然后在2.6.x系列稳定版内核中出现。Futex 是fast userspace mutex的缩写,意思是快速用户空间互斥体。Lin原创 2016-08-24 22:13:37 · 10068 阅读 · 0 评论