Linux内核零碎知识
UNIX系统:内核、shell外壳、文件系统、工具或应用程序。
操作系统功能:进程与处理机管理、存储管理、设备管理、作业管理、文件管理。
内存是磁盘的缓存,cache是内存的缓存。
可把内核看作是不断对请求进行响应的服务器,这些请求可能来自在CPU上执行的进程,也可能来自发出中断请求的外部设备。
抢占内核主要特点是:一个在内核态运行的进程,可能在执行内核函数期间被另外一个进程取代。
使内核可抢占的目的是减少用户态进程的分派延迟,即从进程变为可执行状态到它实际开始运行之间的时间间隔。
cs代码段寄存器有两位字段存指明CPU的当前特权级CPL,0为内核态,3为用户态。
esp寄存器是CPU栈指针,用于存放栈顶单元的地址。从用户态切换到内核态后,进程的内核栈总是空的,因此,esp寄存器指向这个栈的顶端。一旦数据写入栈,esp的值递减。
使用联合结构表示一个进程的线程描述符和内核栈:
union thread_union{
struct thread_info thread_info;
unsigned long stack[];
};
thread_info结构是52字节。
内核使用alloc_thread_info和free_thread_info宏分配和释放存储thread_info结构和内核栈的内存区。
进程最常用的是进程描述符的地址,而不是thread_info结构的地址。为了获得当前在CPU上运行进程的描述符指针,内核要调用current宏,本质上等价于current_thread_info()->task;current->pid返回在CPU上正在执行的进程的PID。
多处理器系统下,有必要把current定义为一个数组,每个元素对应一个可用CPU。
文件描述符:Linux跟踪打开文件而分配的一个数字,类似c语言的句柄。
每运行一个程序时,所有的shell都为其打开三个文件描述符:标准输入0,标准输出1,错误输出2。
不用缓冲的I/O:open read write lseek close提供了不用缓冲的I/O,这些函数都使用文件描述符。
硬件高速缓存Cache:缩小CPU和RAM之间的速度不匹配
IPC进程间通信:管道(速度慢、容量有限)、信号、信号量(同步)、共享内存(速度快)、消息队列(容量有限)、socket。
用户ID标识不同的用户,0为根或超级用户,通常登录名为root。
信号signal:通知进程已发生某种情况的一种技术。
信号量:内核信号量(由内核控制路径使用);System V IPC信号量(由用户态进程使用)。
内核信号量类似于自旋锁,因为当锁关闭着时, 它不允许内核控制路径继续进行。只有睡眠的函数才能获取内核信号量,中断处理程序和可延迟函数都不能使用内核信号量。
自旋锁spin lock是用来在多处理器环境中工作的一种特殊的锁。当发现“上锁”了,则反复执行一条紧凑的循环指令,直到锁被释放。自旋锁的循环指令表示“忙等”。
一般由自旋锁保护的每个临界区都是禁止内核抢占的。
系统中的并发度取决于:同时运转的I/O设备数;进行有效工作的CPU数。
Linux内核零碎知识的更多相关文章
- Linux 内核预备知识:浅析 offsetof 宏以及新手的所思所想
最近一头扎进了 Linux 内核的学习中,对于我这样一个没什么 C 语言基础的新生代 Java 农民工来说实在太痛苦了.Linux 内核的学习,需要的基础知识太多太多了:C 语言.汇编语言.数据结构与 ...
- linux的零碎知识
一 nfs服务器 1 NFS的介绍:是Network File System的简写,是网络文件系统.用于分散式文件系统的协定,由sun公司开发的,在1984年向外公布的. 2 NFS的功能:是通 ...
- linux 相关零碎知识整理
1.启动bash shell 大部分linux系统启动用户命令行接口(cli)环境时使用默认的bash shell,在bash shell启动时,它将自动执行位于用户主目录下的.bashrc中的命令. ...
- Linux内核学习之路
每当学习到一定阶段自己觉得还行时,就会搜一些别人的文章. 这篇文章是原作者14年3月写的.转过来与自己共勉.学习累了就换着学也挺好 原文: 现在回首看看,接触Linux已经很长时间了. 在大三的时候开 ...
- 24小时学通Linux内核--内核探索工具类
寒假闲下来了,可以尽情的做自己喜欢的事情,专心待在实验室里燥起来了,因为大二的时候接触过Linux,只是关于内核方面确实是不好懂,所以十天的时间里还是希望能够补充一下Linux内核相关知识,接下来继续 ...
- Linux内核3.0移植并基于Initramfs根文件系统启动
Linux内核移植与启动 Target borad:FL2440 Bootloader:U-boot-2010.09 交叉编译器:buildroot-2012.08 1.linux内核基础知识 首先, ...
- 十天学Linux内核之第一天---内核探索工具类
原文:十天学Linux内核之第一天---内核探索工具类 寒假闲下来了,可以尽情的做自己喜欢的事情,专心待在实验室里燥起来了,因为大二的时候接触过Linux,只是关于内核方面确实是不好懂,所以十天的时间 ...
- 《Linux内核分析》期末总结及学习心得
[洪韶武 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ] 一.学习心得 本学 ...
- linux 内核移植和根文件系统的制作【转载】
原文地址:http://www.cnblogs.com/hnrainll/archive/2011/06/09/2076214.html 1.1 Linux内核基础知识 在动手进行Linux内核移植之 ...
随机推荐
- [转]Socket send函数和recv函数详解
1.send 函数 int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP ...
- 05_IOC容器装配Bean(注解方式)
IOC容器装配Bean(注解方式) 1.使用注解方式进行Bean注册 xml 方式: <bean id="" class=""> spring2.5 ...
- ServiceStack.OrmLite 笔记
ServiceStack.OrmLite 笔记1 ServiceStack.OrmLite 这个东东就是个orm框架,可以实现类似ef的效果.具体的就不这里班门弄斧了. 支持 SqlServerDia ...
- HDU 5826 physics(物理)
physics(物理) Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) D ...
- 搭建SSH入过的那些坑
1.添加完相关jar包,写完配置文件,写完测试类,运行提示 WARN:Establishing SSL connection without server's identity verificatio ...
- url 转码 urlencode和 urldecode
参考网址http://www.t086.com/code/php/function.php-urlencode.php urlencode 将字符串以 URL 编码. 语法: string urlen ...
- iOS - MVP 架构模式
1.MVP 从字面意思来理解,MVP 即 Modal View Presenter(模型 视图 协调器),MVP 实现了 Cocoa 的 MVC 的愿景.MVP 的协调器 Presenter 并没有对 ...
- iOS - UIGestureRecognizer
前言 NS_CLASS_AVAILABLE_IOS(3_2) @interface UIGestureRecognizer : NSObject @available(iOS 3.2, *) publ ...
- CXF WebService 开发文档
参考资料: 1. http://cxf.apache.org/docs/ 2. http://www.cnblogs.com/hoojo/archive/2011/03/30/1999587.html ...
- sscanf的用法(转)
队长做上海邀请赛的I题时遇到一个棘手的问题,字符串的处理很麻烦,按传统的gets全部读入的话还要做N多处理,太浪费时间. 回来之后搜了一下sscanf的用法发现可以很好的解决这一类问题,各种百度,转来 ...