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.命令行参数
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(), 进程可为自己消耗的各类资源设定一个上限
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端