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内核零碎知识的更多相关文章

  1. Linux 内核预备知识:浅析 offsetof 宏以及新手的所思所想

    最近一头扎进了 Linux 内核的学习中,对于我这样一个没什么 C 语言基础的新生代 Java 农民工来说实在太痛苦了.Linux 内核的学习,需要的基础知识太多太多了:C 语言.汇编语言.数据结构与 ...

  2. linux的零碎知识

    一  nfs服务器 1  NFS的介绍:是Network File System的简写,是网络文件系统.用于分散式文件系统的协定,由sun公司开发的,在1984年向外公布的. 2  NFS的功能:是通 ...

  3. linux 相关零碎知识整理

    1.启动bash shell 大部分linux系统启动用户命令行接口(cli)环境时使用默认的bash shell,在bash shell启动时,它将自动执行位于用户主目录下的.bashrc中的命令. ...

  4. Linux内核学习之路

    每当学习到一定阶段自己觉得还行时,就会搜一些别人的文章. 这篇文章是原作者14年3月写的.转过来与自己共勉.学习累了就换着学也挺好 原文: 现在回首看看,接触Linux已经很长时间了. 在大三的时候开 ...

  5. 24小时学通Linux内核--内核探索工具类

    寒假闲下来了,可以尽情的做自己喜欢的事情,专心待在实验室里燥起来了,因为大二的时候接触过Linux,只是关于内核方面确实是不好懂,所以十天的时间里还是希望能够补充一下Linux内核相关知识,接下来继续 ...

  6. Linux内核3.0移植并基于Initramfs根文件系统启动

    Linux内核移植与启动 Target borad:FL2440 Bootloader:U-boot-2010.09 交叉编译器:buildroot-2012.08 1.linux内核基础知识 首先, ...

  7. 十天学Linux内核之第一天---内核探索工具类

    原文:十天学Linux内核之第一天---内核探索工具类 寒假闲下来了,可以尽情的做自己喜欢的事情,专心待在实验室里燥起来了,因为大二的时候接触过Linux,只是关于内核方面确实是不好懂,所以十天的时间 ...

  8. 《Linux内核分析》期末总结及学习心得

    [洪韶武 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ] 一.学习心得 本学 ...

  9. linux 内核移植和根文件系统的制作【转载】

    原文地址:http://www.cnblogs.com/hnrainll/archive/2011/06/09/2076214.html 1.1 Linux内核基础知识 在动手进行Linux内核移植之 ...

随机推荐

  1. [转]Socket send函数和recv函数详解

    1.send 函数 int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP ...

  2. 05_IOC容器装配Bean(注解方式)

    IOC容器装配Bean(注解方式) 1.使用注解方式进行Bean注册 xml 方式: <bean id="" class=""> spring2.5 ...

  3. ServiceStack.OrmLite 笔记

    ServiceStack.OrmLite 笔记1 ServiceStack.OrmLite 这个东东就是个orm框架,可以实现类似ef的效果.具体的就不这里班门弄斧了. 支持 SqlServerDia ...

  4. HDU 5826 physics(物理)

     physics(物理) Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)   D ...

  5. 搭建SSH入过的那些坑

    1.添加完相关jar包,写完配置文件,写完测试类,运行提示 WARN:Establishing SSL connection without server's identity verificatio ...

  6. url 转码 urlencode和 urldecode

    参考网址http://www.t086.com/code/php/function.php-urlencode.php urlencode 将字符串以 URL 编码. 语法: string urlen ...

  7. iOS - MVP 架构模式

    1.MVP 从字面意思来理解,MVP 即 Modal View Presenter(模型 视图 协调器),MVP 实现了 Cocoa 的 MVC 的愿景.MVP 的协调器 Presenter 并没有对 ...

  8. iOS - UIGestureRecognizer

    前言 NS_CLASS_AVAILABLE_IOS(3_2) @interface UIGestureRecognizer : NSObject @available(iOS 3.2, *) publ ...

  9. CXF WebService 开发文档

    参考资料: 1. http://cxf.apache.org/docs/ 2. http://www.cnblogs.com/hoojo/archive/2011/03/30/1999587.html ...

  10. sscanf的用法(转)

    队长做上海邀请赛的I题时遇到一个棘手的问题,字符串的处理很麻烦,按传统的gets全部读入的话还要做N多处理,太浪费时间. 回来之后搜了一下sscanf的用法发现可以很好的解决这一类问题,各种百度,转来 ...