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内核移植之 ...
随机推荐
- HTML5媒体
1.视频格式 格式 文件 描述 AVI .avi AVI (Audio Video Interleave) 格式是由微软开发的.所有运行 Windows 的计算机都支持 AVI 格式.它是因特网上很常 ...
- CodeForces 384A Coder
Coder Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- 06_在web项目中集成Spring
在web项目中集成Spring 一.使用Servlet进行集成测试 1.直接在Servlet 加载Spring 配置文件 ApplicationContext applicationContext = ...
- 安装 slowhttptest ddos攻击软件
kali:apt-get install slowhttptest
- CUBRID学习笔记 31 通过select创建表
语法 CREATE {TABLE | CLASS} <table_name> [( <column_definition> [,<table_constraint> ...
- hdu 5150 Sum Sum Sum 水
Sum Sum Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Prob ...
- C++指针内存
这是一个关于C++指针的问题,思考了一下 void GetMemory(char *p, int num){ p = (char*) malloc (sizeof(char) * num); } vo ...
- Tomcat6.0的Thisisverylikelytocreateamemoryleak异常
從Apache Tomcat 5.5升級到6.0,通常不用太大的修改,原有的Web Application就能繼續運作.不過在server.xml中設定MySQL Datasource,卻出現一串惱人 ...
- 笔记本_thinkpad_e40
1. 0578A69 2.驱动下载 相关地址 XPhttp://think.lenovo.com.cn/support/driver/detail.aspx?docID=DR1253259153348 ...
- poj2208Pyramids(四面体面积--公式)
链接 一公式题.. 证明讲解参照http://www.cnblogs.com/dgsrz/articles/2590309.html 注意对棱 顺序 #include <iostream> ...