zoukankan      html  css  js  c++  java
  • TLPI读书笔记第2章-基本概念1

    一、基本概念

    1.1 内核

    内核:管理并分配计算机资源(CPU、RAM和设备)的核心层软件

    内核的职责:

    1.1.1 进程调度

    1.1.2 内存管理,虚拟内存管理

    1.1.3 提供文件系统

    1.1.4 创建和终止进程

    1.1.5 对设备的访问

    1.1.6 联网

    1.1.7 提供系统调用应用编程接口API

    创建、销毁、进程间通信都是内核的工作,进程没有这些能力

    1.2 shell

    shell用来读取用户命令,执行相应程序响应命令

    1.3 用户和组

    1.3.1 用户

    系统中的每个用户都有唯一的用户名和UID,/etc/passwd为每个用户都记录了一条记录,其中包括组ID,主目录和登录shell,密码存在另外一个文件

    1.3.2 组

    将多个用户分组是非常实用的做法,每个组对应/etc/group的一行记录,该记录包含组名、组ID、用户列表

    1.3.3 超级用户

    超级用户ID为0,通常登录名为root,可以访问系统所有文件

    1.4 目录和文件

    linux是单根目录

    1.4.1 文件类型

    文件类型包括普通文件和其他文件(设备、管道、套接字、目录以及符号链接)

    1.4.2 路径和链接

    目录是一种特殊类型的文件,内容采用表格形式,内容包括文件名和文件的引用,文件名+引用的组合被称为链接

    目录可以包含指向文件和其他目录的连接

    每个目录至少包含两条记录.和..,前者指向目录自身,后者指向上一级目录,当然对于根目录..是指向自身的

    1.4.3 符号链接

    硬链接和软链接

    1.4.4 文件名

    建议使用字母、数字、.和下划线作为文件名

    1.4.5 路径名

    绝对路径和相对路径

    1.5 文件io

    1.5.1 文件描述符

    系统使用文件描述符指代打开的文件,获取文件描述符的常用方法是调用open()

    通常shell进程会继承三个文件描述符,0=标准输入,1=标准数仓,2=标准错误,分别对应stdin,stdout,stderr函数

    1.5.2 stdio函数

    stdio包含fopen()、 fclose()、 scanf()、 printf()、 fgets()、 fputs()

    他们位于I/O 系统调用层( open()、 close()、 read()、 write()等)之上

    1.6 程序

    程序通常以两种面目示人,一种是源码,可读,另一种是二进制机器码

    1.6.1 过滤器

    从标准输入读取,写到标准输出,有cat、 grep、 tr、 sort、 wc、 sed、 awk

    2.命令行参数

    #argc命令行参数的总个数,argv指针数组的成员指针则逐一指向每个命令行参数字符串。argv[0]标识程序名本身
    int main(int argc,char *argv[])

    1.7 进程

    进程是正在执行的程序实例

    执行程序时,内核会将代码载入虚拟内存,为程序变量分配空间,建立内核记账数据结构,记录进程有关信息,包括进程ID,用户ID,组ID,及终止状态等

    1.7.1 进程的内存布局

    逻辑上讲进程分为几个部分

    文本:程序的指令

    数据:程序使用的静态变量

    堆:程序可从该区域动态分配额外内存

    栈:随函数调用返回而增加的一片内存,用于给局部变量和函数调用链接信息分配存储空间

    1.7.2.创建进程和执行程序

    进程可以使用系统调用fork()创建一个新进程,调用fork的进程被称为父进程,新进程被称为子进程

    子进程从父进程继承数据段、栈段和堆段,接着使用系统调用 execve()去加载并执行一个全新程序。 execve()会销毁现有的文本段、数据段、栈段及堆段,并根据新程序的代码,创建新段来替换它

    1.7.3.进程ID和父进程ID

    当前进程ID=pid,父进程ID=ppid

    1.7.4.进程终止

    进程有两种方法可以终止,进程使用exit系统调用,请求退出,第二向进程传递信号,将其杀死

    不管以哪种方式退出,进程都会生成终止状态,一个非负小整数,可供父进程的wait()系统调用检测

    一般终止状态为0表示进程功成身退,非0表示有错误发生,大多数shell会把前一进程的状态存储到$?

    1.7.5.进程的用户和组标识符

    每个进程都有与之相关的用户UID和组GID

    真实UID和GID

    有效UID和GID

    补充GID

    1.7.6.特权进程

    特权进程指有效UID=0(超级用户)的进程

    其他用户进程成为特权进程的另一方法是利用 set-user-ID 机制,该机制允许某进程的有效用户ID 等同于该进程所执行程序文件的用户 ID

    1.7.7 能力
    17.8 init进程

    init 进程的进程号总为 1,且总是以超级用户权限运行 ,只有关闭系统才能终止该进程 。

    init 的主要任务是创建并监控系统运行所需的一系列进程

    1.7.9 守护进程

    守护进程指的是具有特殊用途的进程,系统创建和处理此类进程的方式与其他进程相同

    守护进程特点:

    “长生不老”。守护进程通常在系统引导时启动,直至系统关闭前,会一直“健在”。 守护进程在后台运行,且无控制终端供其读取或写入数据

    守护进程中的例子有 syslogd(在系统日志中记录消息)和 httpd(利用 HTTP 分发 Web 页面)

    1.7.10 环境列表

    每个进程都有一份环境列表,即在进程用户空间内存中维护的一组环境变量

    在绝大多数 shell 中,可使用 export 命令来创建环境变量

    1.7.11 资源限制

    每个进程都会消耗诸如打开文件、内存以及 CPU 时间之类的资源。使用系统调用 setrlimit(), 进程可为自己消耗的各类资源设定一个上限

  • 相关阅读:
    Chrome 已经原生支持截图功能,还可以给节点截图!
    【promise| async/await】代码的控制力
    移动端各种分辨率手机屏幕----适配方法集锦
    Web Storage事件无法触发
    【php学习】图片处理三步走
    NYOJ 36 LCS(最长公共子序列)
    NYOJ 252 01串 普通dp
    NYOJ 18 The Triangle 填表法,普通dp
    NYOJ-171 聪明的kk 填表法 普通dp
    NYOJ17 最长单调递增子序列 线性dp
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/14621202.html
Copyright © 2011-2022 走看看