`
jianchen
  • 浏览: 335131 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

unix核心编程原理(一)

阅读更多

unix系统是一个多用户系统,他允许很多用户很多程序同时工作,程序经常对文件,目录进行操作,对数据进行转换或传输。同一台机器上的不同程序之间,甚至不同机器上程序之间通过网络都可以通信。

登录-运行程序-注销
在登录过程中,当用户名和密码通过验证后,系统会启动一个叫shell的进程,然后把用户交给这个进程,由这个进程处理用户的请求。每个用户都有属于自己的shell进程。也说明了unix支持多用户的特点。

shell中有些常用的命令:比如who,ls等。
这些命令是如何实现的呢?
这些大都是一个个用c写的可执行程序。当你在shell环境里敲这个命令时,shell就会启动一个该命令的进程来执行。在unix中增加一个命令是很容易的事,把程序的可执行文件放到一下任意一个目录即可:/bin,/usr/bin,/usr/local/bin,这些目录里面存放着很多系统命令。

who命令可以查看系统的登录用户有那些,它又是如何实现的呢?
在系统里用一个utmp文件,专门用于记录用户的登录情况。who通过读文件来获得需要的信息,而每个登录的用户在文件中都有对应的记录。根据文件中的记录的数据结构,读取出相应的内容就行了。当一个文件已经被打开,是否允许再次打开呢?这种情况发生在有多个进程要同时访问一个文件的时候。Unix并不禁止一个文件同时被多个进程访问,如果禁止的话,那两个用户就无法同时使用who命令了。

如何对文件进行操作:如果文件被顺利打开,内核会返回一个正整数的值,这个数值就叫做文件描述符。必须通过文件描述符对文件进行操作。

同理,执行logout命令,就是打开utmp文件,从中找到包含你所在终端的登录记录对当前记录做修改。关闭文件。主要是如何把修改过的记录写回文件问题,可以调用系统函数lseek()使用文件指针找到相应位置,把修改过的内容从新写回,覆盖原来的即可。

为什么系统调用需要很多时间?
用户进程位于用户空间,内核位于系统空间,磁盘只能被内核直接访问。程序要读取磁盘上的数据只能通过系统调用read,而read的代码在内核中,所以当read调用发生时,执行权会从用户代码转移到内核代码,执行内核代码是需要时间的。系统调用的开销大不仅仅是因为要传输数据,当运行内核代码时,CPU工作在管理员(又称超级用户模式)模式,这对应于一些特殊的堆栈和内存环境,必须在系统调用发生时间建立好。系统调用结束后(read返回时),cpu要切换到用户模式,必须把堆栈和内存环境恢复成用户程序运行时的状态,这种运行环境的切换要消耗很多时间。


现在再来了解一下ls的工作原理:
每次使用ls时,会列出相应目录下的目录和文件名。我们首先了解目录是什么。目录是一种特殊的文件,他的内容是文件和目录的名字。从某种意义上说,目录文件与utmp文件很类似。他们都包含很多记录,每个记录的格式由统一的标准定义。与普通文件不同的是,目录文件的内容永远不为空,每个目录都都至少包含两个特殊的项--".","..",前者表示当前目录,后者表示上一级目录。目录是文件的列表,更确切的说,是记录的序列,每条记录对应一个文件或子目录,通过readdir读取目录中的记录即可,解析数据结构,打印出文件或目录名,这样就实现了ls命令,当然还要注意打印输出时的排版格式。

分享到:
评论

相关推荐

    UnixLinux 核心编程教程

    Unix/Linux操作系统简介 GNU编译工具GCC GNU C 内存管理 文件I/O 进程管理 信号 进程间通信 多线程 网络通信

    Unix系统编程(程序设计语言+系统调用)

    本课程主要讲述在Unix/Linux环境下高级编程的方法,其内容包括文件、信号、POSIX线程、UDP、WEB和客户机服务器等相关知识,并由浅入深讲述通信、并发和多线程编程的核心技术、实用技术。 前导课程: ①操作系统原理 ...

    UNIX操作系统教程

    《UNIX操作系统教程(第3版)》讲解细致,由浅入深,全面论述了UNIX系统的核心技术与操作系统的基本原理。新版教材更加实用,非常适合作为高等院校计算机及相关专业的操作系统等课程的教材,同时也适合对UNIX系统技术...

    unix大全(涵盖了UNIX学习的方方面面)

    15.SCO UNIX5 的动态核心表 16.进程管理的两个命令(PS,Sar) 评论 17.进程管理的两个命令(PS,Sar) 18.性能相关的几个核心参数(CPU,I/O,MEMORY) 19.SCO NFS详解 20.SCO命令--df 21.SCO OpenServer 5.0.5中DHCP如何...

    UNIX操作系统教程 张红光

    第1章绪论.1 1.1操作系统概述1 1.1.1建立操作系统的目标1 1.1.2操作系统是用户与计算机的接口1 1.1.3操作系统是资源管理器2 1.2UNIX系统的主要特性3 1.3UNIX系统的发展史4 1.4开源软件与UNIX的推广发展6 1.4.1开源...

    网络游戏框架服务端编程

    本书作者以其在韩国多年从事网络游戏开发的经验,向读者展示了网络游戏开发的核心——服务器编程的基本原理和特定技巧。书中首先介绍了计算机网络的基础知识,以及unix socket、winsock编程;然后全面讲述网络游戏...

    Linux内核工作原理 word版本 强烈推荐

    早期UNIX是用汇编语言编写的,但其第三个版本用一种崭新的编程语言C重新设计了。C是Richie设计出来并用于编写操作系统的程序语言。通过这次重新编写,Unix得以移植到更为强大的 DEC PDP-11/45与11/70计算机上运行。...

    Linux系统设计-深入浅出 Linux 操作系统:操作系统原理、Linux 应用实践、并发编程、物联网操作系统

    它继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统,Linux是许多企业和服务提供商的首选操作系统,用于部署Web服务器、数据库服务器、邮件服务器等。Linux系统具有高效的网络功能和稳定的...

    网络编程教程,很好的一本写linux网络编程书,这是我上传的源码

     1.3.2 Linux中描述进程的核心数据结构。  1.3.3 和进程相关的系统调用  本章小结 第二章 进程间通信和同步  2.1 信号的处理  2.1.1 Linux中支持的信号  2.1.2 信号的捕获和处理  2.1.3 ...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    最近几年,他专注于研究Oracle内部原理以及解决性能问题。他的博客主页是 kerryosborne.oracle-guy.com。  ROBYN SANDS 思科公司的软件工程师,为思科的客户设计开发嵌入式Oracle数据库产品。从1996年开始使用...

    linux操作系统内核技术-uestc课件

     1掌握处理器在进程地址空间上的三种运行位置,了解内核编程不能使用C库函数和FPU,以及可能产生内存故障、核心栈溢出和四种内核竞争情形的原因。(2学时)  2熟悉进程描述符的组织,进程上下文和进程状态转换,和...

    TUXEDO:基于IPC机制浅析TUXEDO及其应用.doc

    本文从底层IPC机制出发,结合UNIX核心系统参数和ATMI技术,借用ipcs观察Tuxedo所消耗的IPC系统资源状况,浅析了Tuxedo强大功能背后的工作原理,进一步加深对Tuxedo应用和ATMI编程的理解,提出了解决实际工作中关键...

    java多线程tcpsocketserver源码-Java-Book:Java学习资料整理

    Unix环境高级编程 --(这三本书主要还是看看Linux下的IO模型,select 和epoll的区别,后面有的框架会涉及到这些内容,比如netty) Unix网络编程 Linux 系统编程手册 Java 基础和进阶 疯狂Java讲义 Java 核心基础卷1/2 ...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    只需要很少的编程知识你就能使用PHP建立一个真正交互的WEB站点。本教程并不想让你完全了解这种语言,只是能使你尽快加入开发动态web站点的行列。我假定你有一些HTML(或者HTML编辑器)的基本知识和一些编程思想。 1...

    从零开发操作系统:从加电自检到内核引导

    本门课程是《C语言核心编程》的姊妹篇,正如C和Unix是孪生兄弟一般,本门课程向K?&?R致敬,探索计算机装置的本身原理。本课程基于X86架构,实现了从机器加电自检开始,到一个内建命令操作系统(内核雏形)的实现。...

    架构解密从分布式到微服务(Leaderus著)

    《架构解密:从分布式到微服务》一开始并没有提及分布式的枯燥理论,而是讲述了一段精彩的IT发展史,其中重点讲述了大型机、UNIX小机器的没落与X86平台的崛起,从而巧妙地引出CPU、内存、网络、存储的分布式演进过程...

    入门学习Linux常用必会60个命令实例详解doc/txt

    在Linux 和Unix系统上,所有文件都是作为一个大型树(以/为根)的一部分访问的。要访问CD-ROM上的文件,需要将CD-ROM设备挂装在文件树中的某个挂装点。如果发行版安装了自动挂装包,那么这个步骤可自动进行。在Linux...

    会计理论考试题

    阅读和编程,把机器语言进行符号化,相应的语言称为__D__。 A、数据库系统 B、高级语言 C、源程序 D、汇编语言 4. 应用程序窗口缩成图标后,___A____是不正确的说法。 A、应用程序停止运行 B、应用程序继续运行 C、...

Global site tag (gtag.js) - Google Analytics