1. Linux系统编程的三大基石:系统调用、C语言库、C编译器

系统调用:内核向用户级程序提供服务的唯一接口。在i386中,用户级程序执行软件中断指令 INT n 之后切换至内核空间
用户程序通过寄存器告知内核执行系统调用的所需参数
 

2. API 和 ABI

API:application programming interface 定义源码级接口,必须确保源码级兼容
ABI:application binary interface 定义二进制接口,必须确保二进制兼容
ABI包括:调用约定、字节序、寄存器使用、系统调用、链接、二进制文件格式
调用约定:定义了 函数如何调用、参数如何传递、寄存器使用、调用者恢复返回值
ABI与机器体系结构密切相关,不同体系结构的机器具有不同的ABI
 

3. 文件

文件是在linux中最基本和最基本的抽象。
内核在并发文件访问上没有任何限制条件,多个进程可以对同一个文件同时进行读写操作
用户级程序必须相互协调以确保并发文件访问得到正确的同步
 
每个文件在文件系统内都是通过唯一的inode编号来引用,inode节点包含了文件绝大部分信息,对应于系统调用stat
通过inode编号来存取文件非常繁琐,因此 用户级程序都是通过文件名而不是文件的inode编号来访问
目录就是用来将人类可读的文件名映射为 文件系统内相应的inode编号,目录项(dentry)就是存储诸对映射的哈希表
目录仅仅包括文件名到inode编号的映射,内核使用这个映射来执行 finename-to-inode 决议
 
例如打开 /home/blackbeard/concorde.png
内核顺沿路径名的目录项(内核里称为 dentry) 来查找 下一个entry的inode
内核首先从 / 开始,获取 home 的inode,然后从home的目录项获取 blackbeard 的inode,最后从blackbeard的目录项获取concorde.png的inode,通过最后得到的inode打开文件
内核通常使用 dentry cache (目录项缓存) 来加速 目录决议
 
硬链接:多个不同的文件名映射到同一inode
硬链接允许我们多个路径名指向同一数据,每个inode记录一个指向它自己的链接数,只有当链接数减少至0时,才能从文件系统移除inode
硬链接不能跨文件系统,因为在inode自身的文件系统之外,inode编号是没有意义的。
 
符号链接:可以跨文件系统的链接
 
字符设备:类似字节队列,按照队列顺序依次读取字符,键盘就是字符设备
块设备:类似字节数组
命名管道:进程间通信机制 
套接字:提供不同机器之间的进程间通信
 
文件系统是组织文件和目录形成的合理的层次体系。文件系统可以独自地从全局命名空间中添加或移除,称为 挂载 和 卸载
 

4. 进程

进程是正在执行的目标代码。
进程开始于可执行目标代码,Linux最常用的格式为 ELF
ELF中最重要的是 文本段、数据段 和 bss段:
文本段包括 可执行代码和只读数据,比如 常量
数据段包括 初始化数据
bss段包括 未初始化的全局数据。当bss段加载进内存时,内核会对该段映射 zero page(a page of all zero)
 
进程只能通过系统调用来请求和管理资源(包括计时器、信号、打开文件、网络连接、硬件、IPC机制)
进程是虚拟化抽象,Linux内核通过 抢占式多任务 和 虚拟内存 来提供 处理器虚拟化 和 内存虚拟化
从进程角度来看,进程独占cpu,每个进程都有单一的线性地址空间
 
Linux中,进程遵循严格的层次体系,即 进程树
进程树的根节点是 init 进程,新进程通过fork创建, 如果父进程在子进程之前结束,那么内核将该子进程挂在 init 父进程之下
一个子进程终止时,并不立即从内核移除,而是等待其父进程通过wait查询其终止状态。只有父进程wait之后,该进程才完全消亡。
一个已经终止,但是仍未被父进程wait的进程称为 僵死进程
 

5. 用户权限

 

6. 信号

信号是一种异步通知机制
SIGKILL:always terminates the process
SIGSTOP:always stops the process

Linux System Programming 学习笔记(一) 介绍的更多相关文章

  1. Linux System Programming 学习笔记(十一) 时间

    1. 内核提供三种不同的方式来记录时间 Wall time (or real time):actual time and date in the real world Process time:the ...

  2. Linux System Programming 学习笔记(七) 线程

    1. Threading is the creation and management of multiple units of execution within a single process 二 ...

  3. Linux System Programming 学习笔记(六) 进程调度

    1. 进程调度 the process scheduler is the component of a kernel that selects which process to run next. 进 ...

  4. Linux System Programming 学习笔记(四) 高级I/O

    1. Scatter/Gather I/O a single system call  to  read or write data between single data stream and mu ...

  5. Linux System Programming 学习笔记(二) 文件I/O

    1.每个Linux进程都有一个最大打开文件数,默认情况下,最大值是1024 文件描述符不仅可以引用普通文件,也可以引用套接字socket,目录,管道(everything is a file) 默认情 ...

  6. Linux System Programming 学习笔记(十) 信号

    1. 信号是软中断,提供处理异步事件的机制 异步事件可以是来源于系统外部(例如用户输入Ctrl-C)也可以来源于系统内(例如除0)   内核使用以下三种方法之一来处理信号: (1) 忽略该信号.SIG ...

  7. Linux System Programming 学习笔记(九) 内存管理

    1. 进程地址空间 Linux中,进程并不是直接操作物理内存地址,而是每个进程关联一个虚拟地址空间 内存页是memory management unit (MMU) 可以管理的最小地址单元 机器的体系 ...

  8. Linux System Programming 学习笔记(八) 文件和目录管理

    1. 文件和元数据 每个文件都是通过inode引用,每个inode索引节点都具有文件系统中唯一的inode number 一个inode索引节点是存储在Linux文件系统的磁盘介质上的物理对象,也是L ...

  9. Linux System Programming 学习笔记(五) 进程管理

    1. 进程是unix系统中两个最重要的基础抽象之一(另一个是文件) A process is a running program A thread is the unit of activity in ...

随机推荐

  1. Bootstrap历练实例:堆叠的进度条

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  2. vs 2012打开vs2013的sln

    Project -> Properties -> General -> Platform Toolset (as IInspectable correctly commented)

  3. cocos2dx for lua A*寻路算法实现2

    关于A*算法的实现过程,简单来说就是一个计算权限的过程. 首先,创建一个地图节点类,"MapNode.lua" local MapNode = class("MapNod ...

  4. 【启发式搜索】Codechef March Cook-Off 2018. Maximum Tree Path

    有点像计蒜之道里的 京东的物流路径 题目描述 给定一棵 N 个节点的树,每个节点有一个正整数权值.记节点 i 的权值为 Ai.考虑节点 u 和 v 之间的一条简单路径,记 dist(u, v) 为其长 ...

  5. matplot绘图(五)

    b3D图形绘制 # 导包:from mpl_toolkits.mplot3d.axes3d import Axes3Dimport matplotlib.pyplot as plt%matplotli ...

  6. vtigercrm安装

    vtigercrm是一个用户关系管理系统. 本以为安装只用半个小时就可以完成,结果花了两天时间.. 后来因为不想其他的因素影响,重新装了个纯净的系统.(系统为ubuntu16,安装过程略) 在系统基础 ...

  7. 文件处理seek以及修改内容的两种方式

    f.seek(offset,whence)offset代表文件的指针的偏移量,单位是字节byteswhence代表参考物,有三个取值# 0:参照文件的开头# 1:参照当前文件指针所在位置# 2: 参照 ...

  8. thinkcmf5 模板版变量的加载过程 和 新增网站配置项怎么全局使用

    1.模板全局配置是怎么加载的 在 HomeBaseController.php 的 fech方法 $more     = $this->getThemeFileMore($template); ...

  9. python3 完全平方数(循环)

    题目 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 代码: for i in range(1,85): if 168 % i == 0: j = 168 ...

  10. SQL Server ALwayson 正在解析

    原因:把主库切换到辅助副本以后,集群全部出现正在解析的情况,数据库显示“恢复挂起” 过程:把服务器重启,原以为正在解析会恢复正常.结果失败. 解决方法:出现“正在解析”的情况跟故障转移群集有关,进故障 ...