思路:在unix系统中有一个名为utmp的文件,里面存着当前登录到系统中用户的信息。utmp这个文件里面保存的是结构数组,数组元素是utmp类型的结构。实现who命令,只要依次从utmp文件中读出utmp类型的结构体,然后通过合适的方式将它显示出来即可。如果每一次只从文件里面读一个结构体数据,那么每一个结构体都要进行依次系统调用。而又因为系统调用比较耗时(涉及到用户态到核心态的切换),所以这样会造...
分类:
系统相关 时间:
2014-10-13 22:48:47
阅读次数:
265
(1)用户级线程
主要解决的是上下文切换的问题,它的调度算法和调度过程会全部由用户自行选择解决,在运行时不需要特定的内核支持。操作系统往往会提供一个用户空间的线程库,该用户程序库提供了线程的创建、调度和撤销等功能,而内核仍然对进程进行管理。如果一个进程中的某一个线程调用了一个阻塞的系统调用函数,那么该进程包括该进程中的线程也同时被阻塞。这种用户级线程的主要缺点是在一个进程中的多个线程的调度中无法...
分类:
编程语言 时间:
2014-10-13 01:50:49
阅读次数:
205
什么是僵尸进程?首先内核会释放终止进程(调用了exit系统调用)所使用的所有存储区,关闭所有打开的文件等,但内核为每一个终止子进程保存了一定量的信息。这些信息至少包括进程ID,进程的终止状态,以及该进程使用的CPU时间,所以当终止子进程的父进程调用wait或waitpid时就可以得到这些信息。而僵尸...
分类:
系统相关 时间:
2014-10-12 15:45:08
阅读次数:
384
套接口这个概念最先由4.2BSD(1983)引入,现在已经成为一个通用的网络应用程序编程接口,受到所有操作系统的支持。套接口层位于应用程序和 协议栈之间,对应用程序屏蔽了与协议相关实现的具体细节。
通常,应用程序中调用库函数,而库函数通过系统调用进入套接口层,Linux的套接口层实现提供了一组专门的套接口系统调用,分别在对应的库函数名之上加上"sys_"前缀。此外为了体现一切皆文件的理念,L...
分类:
其他好文 时间:
2014-10-12 15:24:38
阅读次数:
238
早期UNIX系统的一个特性是:如果在进程执行一个低速系统调用而阻塞期间捕捉到一个信号,则该系统调用就被中断不再继续执行。该系统调用返回出错,其errno设置为EINTR。这样处理的理由是:因为一个信号发生了,进程捕捉到了它,这意味着已经发生了某种事情,所以是个好机会应当唤醒阻塞的系统调用。在这里,我...
分类:
其他好文 时间:
2014-10-12 13:09:28
阅读次数:
229
Linux提供了丰富的帮助手册,当你需要查看某个命令的参数时不必到处上网查找,只要man一下即可。
Linux 的man手册共有以下几个章节:
1、Standard commands (标准命令)
2、System calls (系统调用)
3、Library functions (库函数)
4、Special devices (设备说明)
5、File formats (文件格式...
分类:
系统相关 时间:
2014-10-11 18:49:55
阅读次数:
177
sar(System Activity Reporter系统活动情况报告)是目前Linux上最为全面的系统性能分析工具之一,可以从多个方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存的使用情况、进行活动以及IPC有关的活动等。下面主要以Redhat.....
分类:
系统相关 时间:
2014-10-09 22:02:08
阅读次数:
336
简介
许多类型的驱动程序编程都需要了解一些虚拟内存子系统如何工作的知识当遇到更为复杂、性能要求更为苛刻的子系统时,本章所讨论的内容迟早都要用到本章的内容分成三个部分
讲述mmap系统调用的实现过程讲述如何跨越边界直接访问用户空间的内存页讲述了直接内存访问(DMA)I/O操作,它使得外设具有直接访问系统内存的能力
Linux的内存管理
地址类型
Linux是一个虚拟内存...
分类:
系统相关 时间:
2014-10-09 17:12:38
阅读次数:
279
这里有一个我们经常提出的问题就是fread,read的区别。(当然这两个分别代表了操作文件系统的两套不同的函数,包括open,read, write, seek 等)。
一.他们的区别就是一个(read)是UNIX 中的系统调用,是类UNIX系统,提供给程序员操作文件的接口(要不然你如何操作文件?);而另外一个则是C语言提供的读取文件的函数库,自然这个函数库(ANSI)的实现是以对应的系统调用为...
分类:
其他好文 时间:
2014-10-09 16:59:37
阅读次数:
124
Open系统调用
下面看看open_namei函数:
这个函数的基本的功能是:
首先我们知道filename,也就是知道路径了,那么我们可以根据上级目录项对象,查询下一级的目录项对象,如果在目录项缓存找到下一级的目录项对象,则直接返回,并填充nd的挂载点对象和目录项对象。否则,构建一个子目录项对象,并分配一个新的inode结构,将子目录项对象和inode结构相关联。这样,一直循环到最...
分类:
系统相关 时间:
2014-10-09 16:06:08
阅读次数:
337