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. vue axios 请求 https 的特殊处理

    最近遇到自签发的CA证书,在前端axios请求https请求时,无法自动加载证书. 解决方法:将无法加载的请求在浏览器新窗口手动加载,选择继续连接. 重新加载,问题解决. 根本原因:因为自签发证书,浏 ...

  2. 作业题:闰年 if((year%4==0&&year%100!=0)||year&400==0)

    作业题:闰年 if((year%4==0&&year%100!=0)||year&400==0)

  3. Jenkins忘记管理员密码处理

    1.先找到jenkins安装目录打开config.xml文件. 2.然后编辑,删除以下部分: <useSecurity>true</useSecurity> <autho ...

  4. FastJsonUtils工具类

    fastjson是由alibaba开源的一套json处理器.与其他json处理器(如Gson,Jackson等)和其他的Java对象序列化反序列化方式相比,有比较明显的性能优势. 版权声明:本文为博主 ...

  5. Vue表单输入绑定

    <h3>基础用法</h3> <p>你可以用<strong>v-model</strong>指令在表单input,textarea以及sele ...

  6. uvm transaction modeling

    1.what is transaction? network transactions tcp/ip wifi 3g/4g bus transactions amba-ahb/apb/axi pci/ ...

  7. java中的final关键字(2013-10-11-163 写的日志迁移

     final关键字:修饰符,表示最后的.最终的    修饰类: 表示该类不能派生子类(不能被继承)   1.当不希望父类的的某个方法被子类覆盖(override)时,可以用final关键字来修饰.   ...

  8. 有关Kali的方法

    Kali 找回系统登陆密码的方式:https://jingyan.baidu.com/article/47a29f24560e77c0142399e3.html

  9. OpenCV中图像的BGR格式及Img对象的属性说明

    1. 图像的BGR格式说明 OpenCV中图像读入的数据格式是numpy的ndarray数据格式.是BGR格式,取值范围是[0,255]. 如下图所示,分为三个维度: 第一维度:Height 高度,对 ...

  10. STM8 EEPROM心得

    对于STM8来说,其内部的EEPROM确实是个不错的东西,而且STM8S103/105价格已经非常便宜了,当然也可以用STM8S003/005代替,而且价格更便宜,大概在,1.2/2.0元左右,比10 ...