1、UNIX体系结构

什么叫做内核?

内核是一种软件,它控制计算机硬件资源,并提供程序的运行环境。

什么叫操作系统?

在广义上,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,如可以向用户提供服务之类的。

什么是系统调用?

内核的接口被称为系统调用。公用函数库构建在系统调用接口上,应用软件既可使用公用函数库,也可使用系统调用。

2、文件和目录

创建新目录的时候会自动创建两个文件名:.和..。

在根目录下,这两个文件是同一个文件。

目录是一个包含许多目录项的文件,在逻辑上,可以认为每个目录项都包含一个文件名。(参考《鸟哥的私房菜》)

UNIX文件系统的大多数实现并不在目录项中存放属性,这是因为当一个文件具有多个硬链接时,很难保持多个属性副本之间的同步。

以斜线开头的路径名称为【绝对路径】,否则则为【相对路径】。

根文件的名字/是一个特殊的绝对路径名,它不含文件名。

stdin、stdout和stderr都属于文件,所以可以使用fgets(buf,MAXLINE,stdin);从标准输入中读入一行。

3、输入和输出

文件描述符是一个小的非负整数,内核用它标识一个特定进程正在访问的文件。

按惯例,每当运行一个程序时,所有的shell都为其打开三个文件描述符:标准输入、标准输出以及标准出错。一般情况,这三个描述符都链向终端,但shell也提供一种方法,使其中任何一个或所有三个描述符都能重新定向到某个文件,例如:

  1. ls > file.list

即标准输出到file.list文件,而非终端。

函数open、read、write、lseek以及close提供了不用缓冲的I/O,这些函数都使用了文件描述符。

例子:

  1. #define BUFFSIZE 4096
  2.  
  3. int main()
  4. {
  5. int n;
  6. char buf[BUFFSIZE];
  7.  
  8. while((n = read(STDIN_FILENO,buf,BUFFSIZE)) > 0) {
  9. if(write(STDOUT_FILENO,buf,n) != n) {
  10. printf("write error!");
  11. exit(1);
  12. }
  13.  
  14. if(n < 0) {
  15. printf("read error!");
  16. exit(1);
  17. }
  18. }
  19.  
  20. exit(0);
  21. }

或者

相对于不带缓冲的I/O函数而言,标准I/O函数提供了带缓冲的接口。

【原文:The standard I/O functions provide a buffered interface to the unbuffered I/O functions.】

  1. int main()
  2. {
  3. char c;
  4.  
  5. while((c = getc(stdin)) != EOF) {
  6. if(putc(c,stdout) == EOF) {
  7. printf("output error!");
  8. exit(1);
  9. }
  10.  
  11. if(ferror(stdin)) {
  12. printf("input error!");
  13. exit(1);
  14. }
  15. }
  16.  
  17. exit(0);
  18. }

在运行终端上:

  1. ./test < infile > outfile

此时STDIN_FILENO描述符表示infile,STDOUT_FILENO描述符表示outfile。

4、程序和进程

程序是存放在磁盘上,处于某个目录中的一个可执行文件。使用6个exec函数中的一个由内核将程序读入存储器,并使其执行。

在一个进程内的所有县城共享同一个地址空间、文件描述符、栈以及进程相关的属性。因为它们能访问同一存储区,所以各县城在访问共享数据时需要采取同步措施以避免不一致性。

与进程相同,线程也用ID标识。但是,线程ID只在它所属进程内起作用。一个进程中的线程ID在另一个进程中并无意义。

5、用户标识

用户ID为0的用户为根或超级用户。

6、信号

信号是通知进程已发生某种情况的一种技术。

7、时间值

进程时间。也称为CPU时间,用以度量进程使用的中央处理机资源。

当度量一个进程的执行时间时,UNIX系统使用三个进程时间值:

a、时钟时间。

b、用户CPU时间。

c、系统CPU时间。

时钟时间是进程运行的时间总量。

用户CPU时间是执行用户指令所用的时间。

系统CPU时间是为该进程执行内核程序所经历的时间(系统调用所耗时间)。例如read或write,在内核内执行所花费的时间就计入该进程的系统CPU时间。

用户CPU时间和系统CPU时间之和常被称为CPU时间。

8、系统调用和库函数

系统调用和库函数都以C函数的形式出现。必要时我们可以替换库函数,而通常却不能替换系统调用。

系统调用和库函数之间的一个差别是:系统调用通常提供一种最小接口,而库函数通常提供比较复杂的功能。

01.UNIX基础知识的更多相关文章

  1. UNIX环境高级编程--第一章 UNIX基础知识

    第一章 UNIX基础知识 1.2 UNIX体系结构   从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境.我们将这种软件称为内核(kernel),因为 它相对较小,且 ...

  2. 《UNIX环境高级编程》(APUE) 笔记第一章 - UNIX基础知识

    1 - UNIX基础知识 Github 地址 1. 操作系统 可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境.通常将这种软件称为 内核 (kernel) .( Linux 是 GN ...

  3. 【java基础】01 计算机基础知识

    一.计算机基础知识 1. 计算机 1. 什么是计算机? 计算机在生活中的应用举例 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行,自动.高速处理海量数据的现代化智能电子设 ...

  4. Spring笔记01(基础知识)

    1.基础知识 01.Spring:轻量级Java EE开源框架,它是由Rod Johnson为了解决企业应用程序开发的复杂性而创建. 02.目标:实现一个全方位的整合框架,实现“一站式”的企业应用开发 ...

  5. 《UNIX环境高级编程》笔记——1.UNIX基础知识

    这一章节侧重一些基本概念和书中用到的一些名词. 一.引言 所有的操作都提供服务,典型的服务包括:执行新程序.打开文件.读写文件.分配存储区以及获得当前时间等. 二.UNIX体系结构 其实linux常见 ...

  6. 第一章:UNIX基础知识

    本章内容主要是为了学习UNIX的基本知识和一些最基本的系统函数. 学习的关键就是跟随者书本敲代码.本节遇到的第一个问题就死本书的apue.h这个文件:一开始没有注意这个文件,盲目的去百度,一番百度之后 ...

  7. UNIX基础知识之程序和进程

    一.程序 程序(program)是存放在磁盘上.处于某个目录中的一个可执行文件.使用6个exec函数中的一个由内核将程序读入存储器,并使其执行. 二.进程和进程ID 程序的执行实例被称为进程(proc ...

  8. apue- chapter 1 UNIX基础知识

    1.C++实现ls命令 #include<dirent.h> #include<stdlib.h> #include<iostream> #include &quo ...

  9. UNIX环境高级编程 第1章 UNIX基础知识

    所有操作系统都为运行在它之上的程序提供各种服务,典型的服务包括:执行新程序.打开文件.读写文件.分配存储空间.提供时间等. UNIX体系结构 严格来说,操作系统是一种软件,它控制计算机硬件资源,提供程 ...

随机推荐

  1. 使用jxl操作之一: 实现对Excel简单读写操作

    项目目录树 对象类UserObject UserObject.java package com.dlab.jxl; public class UserObject { private String u ...

  2. Java IO: RandomAccessFile

    原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) RandomAccessFile允许你来回读写文件,也可以替换文件中的某些部分.FileIn ...

  3. PyTorch模型加载与保存的最佳实践

    一般来说PyTorch有两种保存和读取模型参数的方法.但这篇文章我记录了一种最佳实践,可以在加载模型时避免掉一些问题. 第一种方案是保存整个模型: 1 torch.save(model_object, ...

  4. [洛谷P4299] 首都

    题目传送门 还是维护子树信息. 但是这里多了一个找重心的操作. 这里有一个关于树重心的结论,据说可以用反证法证明.反正我不会证 就是:新的重心一定在原来两个重心之间的那条树链上. 这样我们逐步缩小搜索 ...

  5. leetcode笔记——35.搜索插入位置 - CrowFea

    0.问题描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 示例 1: 12 输入: [1,3 ...

  6. 849. Dijkstra求最短路 I

    给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1. 输入格式 第一行包含整数n和m. 接下来m行每行包 ...

  7. 爬虫入门-使用python写简单爬虫

    从第一章到上一章为止,基本把python所有的基础点都已经包括了,我们有控制逻辑的关键字,有内置数据结构,有用于工程需要的函数和模块,又有了标准库和第三方库,可以写正规的程序了. python可以做非 ...

  8. 苹果iPhone9、小米7…当曝光成为一门生意就没那么好玩了

    大众最乐此不疲的,当然就是以熊熊燃烧的八卦之心,去挖掘各种或为隐私,或为未知的那些事儿.为此,狗仔队.曝光人士等就受到了追捧.当然,也有对他们的各种嘲讽--而在智能手机行业,各种曝光更是乐此不疲的上演 ...

  9. (转)Linux设备驱动之HID驱动 源码分析

    //Linux设备驱动之HID驱动 源码分析 http://blog.chinaunix.net/uid-20543183-id-1930836.html HID是Human Interface De ...

  10. Java入门教程十三(多线程)

    线程的概念 单纯种以一个任务完成以后再进行下一个任务的模式进行,这样下一个任务的开始必须等待前一个任务的结束,只有一个任务完成后才能进行下一个任务.Java 语言提供了并发机制,允许开发人员在程序中执 ...