
笔记-Linux内核学习
文章平均质量分 64
张勇1234
这个作者很懒,什么都没留下…
展开
-
五、系统调用(2)-例子分析
用户程序调用getuid() C库给所用系统调用作出了定义,但是自己定义系统调用不想改变库,则在自己mian函数前加入:_syscall0(int, mysyscall)#include <linux/unistd.h>int main(){ int i = getuid(); printf("getuid:%d\n", i); return 0;} getuid经u原创 2017-12-08 15:59:09 · 763 阅读 · 0 评论 -
五、系统调用(1)
运行模式 Inter系列处理器有实模式和保护模式。刚启动处于实模式只能使用实地址访问内存。保护模式下可以使用段页机制,虚地址寻址等,保护模式下还提供4个特权级,linux只使用特权级0(内核模式)和特权级3(用户模式)。地址空间 Linux虚存管理机制下,进程使用虚拟地址,进程都有自己的虚拟空间,通过地址转换机制转换成对物理地址的引用。每个进程的虚拟地址空间可以划分为两个部分:用原创 2017-12-07 10:51:58 · 291 阅读 · 0 评论 -
Linux内核发布时间表
有了这个Linux内核版本发布时间表(0.00到3.19,当然没有包含全部的版本),大家就可以看看自己用的版本是何时发布的了!做内核维护查看相关patch log时大致做个参考。版本号时间发展史0.001991.2-4两个进程分别显示AAABBB0.011991.9第一个正式向外公布的Linux内核版本0.021991.10.5Linux的第一个稳定的工作版本0.031991.10.5 0转载 2017-12-14 14:13:15 · 7726 阅读 · 0 评论 -
三、内核时钟(2)
1、用户层,系统调用sys_setitimer从用户空间得到初始化定时器的值,然后调用do_setitimer设定定时器,并将其挂到定时器链表上。时钟中断irq0->timer_interrupt,bottom half 处理函数timer_bh()调用run_timer_list(),判断定时器时间到达。run_timer_list()首先判断tv1.index的值,若tv1.index非0原创 2017-11-26 10:53:29 · 251 阅读 · 0 评论 -
一些 Linux 诞生大事件
1969 年,Ken Thompson(C语言之父)利用汇编语言开发了 File Server System(Unics,即 UNIX 的原型);1973 年,Dennis Ritchie 和 Ken Thompson 发明了 C 语言,而后写出了 UNIX 的内核;1977 年,Berkeley 大学的 Bill Joy (Sun 公司的创始人;)针对他的机器修改了 UNIX 源码,称为BSD(B原创 2017-11-07 21:48:56 · 460 阅读 · 0 评论 -
三、内核时钟(1)
1、硬件时钟提供计时和产生精确是时钟中断。软件时钟(系统时钟),在系统启动时读取硬件时间为起点,根据启动后的滴答数来计算时间,这个滴答数用全局变量jiffies表示,每个时钟周期更新一次。系统时钟滴答即周期性中断,每个中断jiffies更新一次。jiffies用于系统调度是各个时候。2、软件封装定时器: (1)老版,最多32个timer_active 32bit,每一位控制对应定时器的开关每个定原创 2017-11-22 22:44:02 · 544 阅读 · 0 评论 -
二、shell
1、shell作用:(1)打出提示符,获取用户输入的指令;(2)解析命令,分解命令及参数,处理字符‘|’管道,‘&’后台,‘>’,‘<’;(3)寻找命令文件,对照PATH中‘:’隔开的路径寻找。(4)执行命令//(1)打出提示符,获取用户输入的指令char *path;path = get_current_dir_name();printf("%s>$",path);lc_char = get原创 2017-11-21 20:27:09 · 189 阅读 · 0 评论 -
一、Linux内核简介
1、Linux内核的主要功能 (1)资源抽象:用软件接口抽象不同硬件资源的,简化对其的操作。如设备驱动程序。 (2)资源分配:把抽象出来的各种资源分配给各个进程并负责取回这些系统资源。经编译后的目标程序只有放入内存(RAM)才能执行,目标程序执行时的CPU操作抽象为进程。 (3)资源共享:处理资源竞争情况2、Linux属于单内核,内核包含:内存管理、设备驱动、系统调用。微内核中这些则是由内核上原创 2017-11-13 19:40:08 · 402 阅读 · 0 评论 -
七、虚拟存储
虚拟存储的基本思想: 一个进程的代码、数据、堆栈总量可能超过物理内存容量,OS复制把当前用到的部分留在内存中,把其他部分放在磁盘上(swap区)。当需要用到的某一部分不在内存中,则把暂时不用的写回磁盘,把需要的调入内存。 进程直接产生的是虚拟地址,虚拟地址空间可能比物理内存大的多(不是和磁盘比较),虚拟地址在使用时先送到MMU,MMU把映射成的物理地址送到内存总线。内存和磁盘间原创 2017-12-13 10:44:32 · 264 阅读 · 0 评论 -
四、Linux内核模块
1、Linux提供的模块机制使得不需要对整个内核进行重新编译的情况下,内核动态载入和移除模块。模块一旦链接到内核,它的作用和静态链接的内核目标代码完全等价。为了让内核模块能够访问所有内核资源,内核必须维护符号表,并在装入和卸载模块时修改符号表。2、编写一个最简单的内核模块//hello.c#include <linux/module.h>#include <linux/kernel.h>int原创 2017-12-04 22:40:16 · 649 阅读 · 0 评论 -
六、共享内存
进程间通信IPC管道:同一机器两个进程通信套接字:不同机器两个进程通信System V IPC:同一机器上多个进程间通信。包括:消息队列(频繁传递的多个消息)、信号量(进程间同步)、共享内存(内容较多的通信)。每个IPC都有一个标识符(创建返回时,内核分配)和键值(程序员选择)。共享内存 共享内存实际上是一段特殊的内存区域,这一段区域可以被多个进程映射到自身的地址空间中。原创 2017-12-11 19:23:04 · 216 阅读 · 0 评论 -
——BEGIN_DECLS down_interruptible snprintf
* void down(struct semaphore *sem); //用来获取信号量,如果信号量值大于或等于0,获取信号量,否则进入睡眠状态,睡眠状态不可唤醒* void down_interruptible(struct semephore *sem); //用来获取信号量,如果信号量大于或等于0,获取信号量,否则进入睡眠状态,等待信号量被释放后,激活该程。* void down_tryl...原创 2018-02-23 15:28:35 · 291 阅读 · 0 评论