UNIN体系结构
严格地说,操作系统被定义为控制硬件计算机硬件资源和提供程序运行环境的软件。一般我们把这个软件叫做kernel。

kernel的接口是一层软件,叫做作系统调用。函数库在系统调用的上层,应用可任意使用系统调用和函数库。shell是一个特殊的应用,提供运行其它应用的接口。

登录名
我们登录系统时,输入登录名和密码。系统随即在/etc/passwd中查找用户名。

passwd文件格式:
sar:x:205:105:Stephen Rago:/home/sar:/bin/ksh
登录名:加密的密码:用户ID:组ID:注释字段:家目录:shell程序

Shells
shell是一个命令行解释器,读取用户输入然后执行命令。用户向shell的输入一般来自终端(交互式shell),或有时来自文件(shell脚本)。

文件系统
文件系统是目录和文件的层次结构,起始于根目录"/"。
目录是包含目录项的文件。逻辑上讲,我们可以认为每个目录项包含一个文件名和描述该文件属性的信息结构。文件的属性包括文件类型(普通文件或目录),文件大小,文件所有者,文件权限(是否其它用户可访问此文件)和文件最后修改时间。

文件名
目录中的名字称作文件名。只有两个字符不能出现在文件名中:斜杠“/”和空字符。斜杠分割组成路径名的文件名,空字符结束一个路径名。当一个新的目录被创建时,两个文件名被自动创建:“.”和“…”,前者指向当前目录,后者指向父目录。在根目录,两者相同。

路径名
一个或多个文件的序列,被斜杠分割(可以以一个斜杠开始),组成一个路径名。以斜杠开始的路径名被称作绝对路径名,否则称作相对路径名。相对路径名指向相对于当前目录的文件。文件系统根的名字是一个特殊的绝对路径名,没有文件名部分。

输入和输出

  • 文件描述符
    文件描述符一般是一个非负整数,kernel用它来标识被进程访问的文件。当打开一个存在的文件或创建一个新的文件,kernel返回一个文件描述符用来读写文件。
    标准输入,标准输出和标准错误
    按照惯例,一个新程序运行时,shell打开这三个文件描述符。
  • 无缓冲I/O
    函数open, write, lseek和close提供无缓冲I/O,这些函数都需要文件描述符。
  • 标准I/O
    标准I/O向无缓冲I/O提供一个缓冲接口。使用标准I/O可以免去选择合适的缓冲区buffer大小。标准I/O还简化了处理行输入。比如函数fgets读一整行数据,相反,函数read读取指定字节数据。

程序和进程

  • 程序
    程序是在磁盘上一个目录里的可执行文件。内核使用7个exec函数之一将程序读入内存并执行。
  • 进程和进程ID
    正在执行的程序叫做进程。UNIX系统保证每个进程有一个唯一的标识称作进程ID。进程ID总是一个非负整数。
    getpid()返回进程ID。
  • 线程和线程ID
    同一进程的线程共享相同的地址空间,文件描述符,栈和进程相关属性。每一个线程在自己的栈中执行,尽管任一线程可访问同一进程中其它线程的栈。因为它们可以访问相同内存,各线程需要同步访问来共享内存以避免冲突。
    如同进程,线程也被ID标识。线程ID基于进程。一个进程里的线程ID在另一个进程中没有意义。在一个进程中处理线程时,使用线程ID来引用特定的线程。

错误处理
当一个错误出现在一个UNIX系统函数中,通常返回一个负数,errno被设置来表明错误原因。大多数返回指针的函数在错误时返回NULL。

#include <string.h>
char *strerror(int errnum); //传入errno,返回错误信息
void perror(const char *msg); //标准输出中打印错误信息

用户标识

  • 用户ID
    当登录名被分配时,用户ID被系统管理员分配,不能修改、
    root用户ID为0

  • 组ID
    组用来将一些用户组合在一起,共享一些资源、
    在组文件/etc/group中保存着组名和组ID的映射。
    getuid()返回用户ID,getgid()返回组ID。

信号
信号是用于通知一个进程某种条件已经发生的技术。进程有3种处理信号的选择:

  1. 忽略信号
  2. 默认处理
  3. 提供一个函数在信号发生时执行(信号捕捉)

时间值
UNIX系统维护着两个不同的时间值:

  1. 日历时间
    这个值记录着UTC时间(1970年1月1日00:00:00)到现在的秒数,用于记录文件最后修改的时间。
  2. 进程时间
    也称作CPU时间,度量进程使用的中央处理资源。进程时间以时钟滴答度量,一般以50,60或100每秒。

UNIX系统为进程维护着3个时间:

  1. 时钟时间:进程运行花费的时间。它的值依赖于其它运行在系统上的进程。
  2. 用户CPU时间:用户指令执行的时间
  3. 系统CPU时间:内核执行的时间

UNIX环境高级编程(1)——UNIX系统总览相关推荐

  1. 《UNIX环境高级编程》六系统数据文件和信息读书笔记

    UNIX系统的正常运作需要使用大量与系统有关的数据文件,例如,口令文件/etc/passwd和组文件/etc/group等. 1.口令文件 口令文件的各字段包含在pwd.h>中定义的passwd ...

  2. UNIX环境高级编程——1.UNIX基础知识

    UNIX基础知识 UNIX体系结构 严格意义上来说,可以将操作系统定义为一种软件,控制计算机硬件资源,提供程序运行环境.通常把这种软件成为内核. 内核的接口被成为系统调用(system call).公 ...

  3. (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  4. unix环境高级编程 pdf_UNIX系统编程宝典,每一本都值得程序员珍藏

    这几本UNIX系统编程宝典,重印无数次,几代程序员都视如珍宝的几本书,小编在出版圈里快十年了,见证了这本书图灵版.异步社区版的出版.营销,对这套书倾注了一定的感情.今天继续分享给你们,好书总会有人还不 ...

  5. 5w字总结 Unix系统编程学习笔记(面试向)(Unix环境高级编程/Unix环境程序设计)

    文章目录 一.计算 C语言的数据表示与处理 计算 C语言的基本运算操作 内存表和符号表 类型转换 函数类型的分析 指令 复合指令 句法 函数 函数激活(Activation Record) 函数激活定 ...

  6. 《UNIX环境高级编程(第3版)》——1.7 出错处理

    本节书摘来自异步社区<UNIX环境高级编程(第3版)>一书中的第1章,第1.7节,作者:[美]W. Richard Stevens , Stephen A.Rago著,更多章节内容可以访问 ...

  7. 开发日记-20190822 关键词 读书笔记《Unix环境高级编程(第二版)》《掌控习惯》DAY 2

    Preface 话说,昨天开始尝试着去改变自己,从基础的习惯开始,11:30准时睡觉,平时差不多12:30才睡觉.按理说,比平时早了一个小时睡觉吧,然后我就把闹钟提前了45分钟,想着还能比平常多睡15 ...

  8. apue.h头文件(UNIX环境高级编程)

    相信非常多初学<UNIX环境高级编程>的朋友都会遇到一个问题,执行里面的实例(download: http://www.apuebook.com/ )时就出现故障,提示 "错误: ...

  9. UNIX环境高级编程笔记

    1.setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &opt, len);   SO_REUSEADDR套接口选项允许为以下四个不同的目的提供服务:   ...

最新文章

  1. AD rodc扩展报错
  2. Python高级爬虫开发,高难度JS解密教程,绝地求生模拟登陆!
  3. (002) java后台开发之对象初始化
  4. 达观数据分析平台架构和Hive实践
  5. adb打开网页_adb命令打开手机设置页面
  6. hive 操作(二)——使用 mysql 作为 hive 的metastore
  7. angular6项目中使用echarts图表的方法(有一个坑,引用报错)
  8. c语言程序设计答案四,C语言程序设计练习四(参考答案)
  9. 浅谈智能电能表的远程预付费 系统设计
  10. 散点图矩阵 pd.plotting.scatter_matrix
  11. Android 源码编译详解【一】:服务器硬件配置及机型推荐-2016/06
  12. C语言错误类型中英文对照表
  13. fatal detected dubious ownership in repository at解决办法
  14. 梦幻西游网页版服务器互通吗,梦幻西游网页版:关于合服的那些事儿~最全信息都在这了...
  15. 电容有什么作用?为什么cpu电源引脚都并联一个电容?
  16. 【归并排序】【洛谷】【P1309-瑞士轮】
  17. 从生物信息学转计算机科学,转一个:学生物的,不会编程,也可以报考生物信息学的研究生...
  18. 暗恋一个人是一种什么体验?
  19. NestJS + TypeGraphQL + MySQL 从入门到实战视频教程(35 个视频)
  20. 售后服务的基本流程有哪些

热门文章

  1. ebs各模块名称及英文缩写
  2. spring cloud聚合项目打jar包报错
  3. 《卓有成效的管理者》——学习心得(二)
  4. Pygame详解(十六):cursors 模块
  5. opencv(人脸检测和识别)
  6. 性能测试指南 | 一些实用的排查命令(未完待续)
  7. Java jmap与jcmd命令dump内存heap堆
  8. 基于FPGA的DDS直接数字频率合成器,频率和相位控制字可配置,在vivado2019.2平台中verilog开发.含testbench
  9. 重载和重写的区别。。。。
  10. 创成汇丨2019年那些创业大赛比较好?