《UNIX环境高级编程》学习

image

      这是经典的UNIX体系结构图,在《UNIX高级环境编程》这本书中解释如下:

      操作系统是用来控制计算机硬件资源,提供程序运行环境的软件,一般而言,我们称这种软件为内核。对于这句话我是疑惑的,总觉得这个意思就是操作系统就是内核,事实上,内核是操作系统的基础模块,用于管理系统资源。例如提供对软件层面的抽象(例如对进程、文件系统、同步、内存、网络协议等对象的操作和权限控制),和对硬件访问的抽象(例如磁盘,显示,网络接口卡(NIC))。操作系统是内核基础上的延伸,包括提供基础服务的系统组件。

        system call(系统调用)是内核的接口,Library routines(库函数)是建立在system call(系统调用的基础之上的。shell为运行其他用户程序提供接口,application(应用程序)既可以调用Library routines(库函数)也可以使用 system call(系统调用),还可以在shell上运行。shell是命令行解释器,它读取用户的输入,然后执行命令,而用户的输入一般都是终端,或者脚本(shell脚本就是多个shell命令的集合)。每一个程序运行时,shell都会为他打开三个文件描述符,就是保准输出标准输入以及标准出错。

         

       文件I/O

       文件I/O函数--open,read,write,lseek(用来修改指定文件的当前偏移量)以及close都是不带缓冲的I/O(每个read和write都调用内核中的一个系统调用)

         文件描述符:一个小的非负整数,用于标识一个特定进程正在访问的文件,内核打开或创建一个新文件时,都会返回一个文件描述符,这样在文件读写时可使用文件描述符。标准输入(文件描述符0)、标准输出(描述符1)和标准出错(描述符2)是三个常用的文件描述符

        文件共享

       每个进程在进程表中都有一个记录项,记录项中包含了一张文件描述符表,每个描述符占用一项。与文件描述符相关:文件描述符标志、指向一个文件表项的指针

       内核为所有打开文件维持一张文件表,每个文件表项包含:文件状态标志(读、写、添加、同步和非阻塞等)、当前文件偏移量、指向该文件v节点表项的指针,v节点包含了文件类型和对此文件进行各种操作的函数的指针。对于绝大多数文件,v节点还包含了该文件的i节点(索引节点i_node)。这些信息是在打开文件时从磁盘上读入内存的,所以所有关于文件的信息都是快速可供使用的。例如:i节点包含了文件的所有者、文件长度、文件所在的设备、指向文件实际数据块在磁盘上所在位置的指针等等(下图来自http://blog.chinaunix.net/uid-16813896-id-4705020.html)

                                 

       那会不会出现多个文件描述符指向同一个文件表项?有,待续...

   对于一个给定的文件,只有一个v节点表项。如果两个独立的进程打开同一个文件,最终会指向同一个v节点,至于为什么不用一个文件表,因为每个进程都有它自己的对该文件的当前偏移量。
                              

        UNIX中的时间值

        日历时间:从1970/01/01 00:00:00开始至今所经过的秒数(UTC(国际标准时间))  系统基本数据类型time_t用于保存这种时间

        进程时间(CPU时间):以时间滴答为单位(1/50秒或者1/60秒或者1/100秒为一个滴答),用来度量进程使用的中央处理及资源    系统基本数据类型clock_t用于保存这种时间

        度量进程执行时间时,UNIX通常使用时钟时间(进程运行的时间总量,与系统中同时运行的进程数有关),用户CPU时间(用户指定所用的时间)和系统CPU时间(该进程执行内核程序所经历的时间)。一般CPU时间=时钟时间+用户CPU时间


        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值