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. HTML5媒体

    1.视频格式 格式 文件 描述 AVI .avi AVI (Audio Video Interleave) 格式是由微软开发的.所有运行 Windows 的计算机都支持 AVI 格式.它是因特网上很常 ...

  2. CodeForces 384A Coder

    Coder Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  3. 06_在web项目中集成Spring

    在web项目中集成Spring 一.使用Servlet进行集成测试 1.直接在Servlet 加载Spring 配置文件 ApplicationContext applicationContext = ...

  4. 安装 slowhttptest ddos攻击软件

    kali:apt-get install slowhttptest

  5. CUBRID学习笔记 31 通过select创建表

    语法 CREATE {TABLE | CLASS} <table_name> [( <column_definition> [,<table_constraint> ...

  6. hdu 5150 Sum Sum Sum 水

    Sum Sum Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Prob ...

  7. C++指针内存

    这是一个关于C++指针的问题,思考了一下 void GetMemory(char *p, int num){ p = (char*) malloc (sizeof(char) * num); } vo ...

  8. Tomcat6.0的Thisisverylikelytocreateamemoryleak异常

    從Apache Tomcat 5.5升級到6.0,通常不用太大的修改,原有的Web Application就能繼續運作.不過在server.xml中設定MySQL Datasource,卻出現一串惱人 ...

  9. 笔记本_thinkpad_e40

    1. 0578A69 2.驱动下载 相关地址 XPhttp://think.lenovo.com.cn/support/driver/detail.aspx?docID=DR1253259153348 ...

  10. poj2208Pyramids(四面体面积--公式)

    链接 一公式题.. 证明讲解参照http://www.cnblogs.com/dgsrz/articles/2590309.html 注意对棱 顺序 #include <iostream> ...