1、UNIX体系结构

什么叫做内核?

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

什么叫操作系统?

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

什么是系统调用?

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

2、文件和目录

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

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

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

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

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

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

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

3、输入和输出

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

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

ls > file.list

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

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

例子:

	#define BUFFSIZE        4096

	int main()
{
int n;
char buf[BUFFSIZE]; while((n = read(STDIN_FILENO,buf,BUFFSIZE)) > 0) {
if(write(STDOUT_FILENO,buf,n) != n) {
printf("write error!");
exit(1);
} if(n < 0) {
printf("read error!");
exit(1);
}
} exit(0);
}

或者

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

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

	int main()
{
char c; while((c = getc(stdin)) != EOF) {
if(putc(c,stdout) == EOF) {
printf("output error!");
exit(1);
} if(ferror(stdin)) {
printf("input error!");
exit(1);
}
} exit(0);
}

在运行终端上:

./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. 推荐几位jenkins发布war包和jar包大佬的博客

    jenkins部署tomcat的war包和jar包 https://blog.csdn.net/liuxiaoming1109/article/details/89311696  

  2. struts2和springmvc比较1

    其实都是ssh只是一个是struts2+spring3.0+hibernate,而另外一个是 springmvc+spring3.0+hibernate,纵向来看比较struts2和springmvc ...

  3. Leetcode 981. Time Based Key-Value Store(二分查找)

    题目来源:https://leetcode.com/problems/time-based-key-value-store/description/ 标记难度:Medium 提交次数:1/1 代码效率 ...

  4. MDEV入门

    ------------- MDEV入门------------- 对于我们这些人知道如何使用的mdev ,底漆可能似乎跛.为其他人的mdev是一个神秘的黑匣子,他们听到的是真棒,但不能似乎得到他们的 ...

  5. word2vec的简单理解

    word2vec研究如何将词用向量表示,使用的两个重要模型--CBOW模型(Continuous Bag-of-Words Model)和Skip-gram模型(Continuous Skip-gra ...

  6. gedit搭建c开发环境

    在管理外部工具中,创建启动脚本 #!/bin/sh DIR=$GEDIT_CURRENT_DOCUMENT_DIR NAME=$GEDIT_CURRENT_DOCUMENT_NAME /home/lx ...

  7. Spark OFF_HEP变迁

    在文章的开头,安利一下我自己的github上的一个项目:AlluxioBlockManager,同时还有我的github上的博客:blog这个项目的作用是替代Spark2.0以前默认的TachyonB ...

  8. 【Git】按照git提交ID导出修改的代码

    #!/bin/bash IFS=$'\n' #conf start commid id startCommitId=030cd2bf4e3694fe3a3b6f069556c4ea91a9858d l ...

  9. 使用Pods中使用Swift和Objective-C混编-编译不通过的原因

    iOS开发#使用Pods中使用Swift和Objective-C混编-编译不通过的原因-ld: symbol(s) not found for architecture arm64 问题基本描述 在P ...

  10. celery异步任务框架

    目录 Celery 一.官方 二.Celery异步任务框架 Celery架构图 消息中间件 任务执行单元 任务结果存储 三.使用场景 四.Celery的安装配置 五.两种celery任务结构:提倡用包 ...