作为Linux开发爱好者,从事linux 开发有三年多时间.做过bsp移植,熟悉u-boot代码执行流程:看过几遍<linux 设备驱动程序开发>,分析过kernel启动流程,写过驱动,分析过网卡驱动,制作过文件系统.但,仍无法对kernel有全局认识.为了更清晰的展示kernel概念,结构,实现,以思维导图的形式记录关键点,以便以记忆.增强理解.该部分主要梳理进程管理与调度相关知识点.…
作为Linux开发爱好者,从事linux 开发有两年多时间.做过bsp移植,熟悉u-boot代码执行流程:看过几遍<linux 设备驱动程序开发>,分析过kernel启动流程,写过驱动,分析过网卡驱动,制作过文件系统.但,仍无法对kernel有全局认识.为了更清晰的展示kernel概念,结构,实现,以思维导图的形式记录关键点,以便以记忆.增强理解.该部分是总体描述,大致介绍内核及其结构.同时也希望其能够帮助对linux 内核感兴趣朋友.…
进程优先级 硬实时进程 软实时进程 普通进程 O(1)调度.完全公平调度器 抢占式多任务处理(preemptive multitasking):各个进程都分配到一定的时间段可以执行.时间段到期后,内核会从进程收回控制权,让下一个不同的进程运行,而不考虑前一进程所执行的上一个任务. 进程生命周期 进程状态:运行.等待.睡眠.终止 抢占式多任务处理 从用户态进入核心态的方法: 系统调用:处于核心态时,与当前运行进程相关 硬件中断:处于核心态时,与当前运行进程不相关 普通进程总是可能被抢占,甚至是由其…
作为Linux开发爱好者,从事linux 开发有三年多时间.做过bsp移植,熟悉u-boot代码执行流程:看过几遍<linux 设备驱动程序开发>,分析过kernel启动流程,写过驱动,分析过网卡驱动,制作过文件系统.但,仍无法对kernel有全局认识.为了更清晰的展示kernel概念,结构,实现,以思维导图的形式记录关键点,以便以记忆.增强理解.该部分主要讲系统调用的实现,如何有用户态切换至内核态,内核态切换至用户态及切换过程中的参数和数据传递.…
2.1进程优先级 进程优先级 硬实时进程 软实时进程 抢占式多任务处理 2.2进程生命周期 用户太切换到核心态的办法 系统调用 中断 抢占调度模型优先级普通进程<系统调用<中断 普通进程可以被系统调用和中断抢占 系统调用只有可能被终端抢占 中断不能被任何操作打断 我的博客:www.while0.com…
原文:十天学Linux内核之第二天---进程 都说这个主题不错,连我自己都觉得有点过大了,不过我想我还是得坚持下去,努力在有限的时间里学习到Linux内核的奥秘,也希望大家多指点,让我更有进步.今天讲的全是进程,这点在大二的时候就困惑了我,结果那个时候我就止步不前了,这里主要讲的是为何引入进程.进程在Linux空间是如何实现的,并且描述了所有与进程执行相关的数据结构,最后还会讲到异常和中断等异步执行流程,它们是如何和Linux内核进行交互的,下面我就来具体介绍一下进程的奥妙. 首先我们要明确一个…
原创文章,转载请注明:Linux内核学习笔记-2.进程管理) By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert Love,陈莉君等译. 1.进程 进程是正在执行的程序代码的实时结果,包含打开的文件.挂起的信号等.线程是进程中的活动的对象,内核调度的对象是线程.在Linux内核对线程与进程并不加以区分,线程只不过是一种特殊的进程. 2.进程描述符 内核把进程的信息存放在task list的双向循环链表中,链表中的…
第二章 从内核出发 一.获取内核源码 1.Git是分布式的:下载和管理Linux内核源代码: 2.获取最新提交到版本树的一个副本 $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git 当下载代码后,更新自己的分支到最新分支  $ git pull 3.安装内核源代码 (1)压缩形式为bzip2 运行:$ tar xvjf linux-x.y.z.tar.bz2 (2)压缩形式为zip 运行…
1. Linux是多任务系统, 支持并发执行若干进程,系统同时真正运行的进程数目不超过CPU的数量,因此内核会按照时间间隔在不同进程之间切换. 2.确定那个进程运行多长时间的过程称为调度. 3.内核启动init进程作为第一个进程,该进程负责进一步的系统初始化操作,并显示登陆提示符或登陆界面.因此init是进程树的根,所有进程都直接或间接来源次进程. 4. 进程不是内核支持的唯一一种程序执行方式,除此以外,还有线程. 5. Linux将虚拟地址空间分为两部分,内核空间和用户空间. 6. Intel…
进程管理 进程和文件是Linux操作系统的两个最基本的抽象. 进程是处于执行期的程序,进程不仅仅局限于一段可执行程序代码,通常还包含其他资源,如打开的文件.挂起的信号.内核内部数据.处理器状态.进程地址空间及一个或者多个执行线程(thread of execution).当然还包括用来存放全局变量的数据段等. 线程(thread)是内核调度的对象,每个线程都拥有一个独立的程序计数器(PC指针).函数调用栈和一组寄存器值.在Linux内核中,线程只不过是一种特殊的进程,线程仅仅被视为一个与其他进程…
三种不同的内存地址 逻辑地址(logical address)包含在linux实际指令中的地址,即分段式地址,是对应的硬件平台段式管理转换前地址由16位的段选择符(segment selector)和32位的偏移量组成. 线性地址(linear address)(虚拟地址(virtual address))是一个32位无符号整数,可以表示4G的地址,值范围从0x00000000-0xffffffff.线性地址则对应了硬件页式内存的转换前地址. 物理地址(physical address)用32位…
进程就是出于执行期的程序.进程的另一个名字是任务. 执行线程,简称线程(thread),是在进程中活动的对象.每个线程都有一个独立的程序计数器.进程栈和一组进程寄存器.内核调度的对象是线程,而不是进程. 在现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存. 注意:在线程之间可以共享虚拟内存,但每个都拥有各自的虚拟处理器.…
第三章进程管理 进程是Unix操作系统抽象概念中最基本的一种.我们拥有操作系统就是为了运行用户程序,因此,进程管理就是所有操作系统的心脏所在. 3.1进程 概念: 进程:处于执行期的程序.但不仅局限于程序,还包含其他资源(打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内催音社的内存地址空间及一个或多个执行线程,存放全局变量的数据段等) 内核需要有效又透明地管理所有细节. 线程:执行线程的简称,是在进程中活动的对象.每个线程有一个独立的程序计数器.进程栈和一组进程寄存器.内核调度…
Linux内核设计第二周 ——操作系统工作原理 作者:宋宸宁(20135315) 一.实验过程 图1 执行效果 从图中可以看出,每执行my_ start_ kernel函数两次或一次,my_ time_ hander函数执行一次. 图2 mymain.c文件关键代码部分 图3 myinterrupt.c文件关键代码部分 二.分析分析进程的启动和进程的切换机制(分析见注释) 1.myinterrupt.c /* * linux/mykernel/myinterrupt.c * * Kernel i…
第三章 进程管理 3.1 进程 1.进程就是处于执行期的程序:进程就是正在执行的程序代码的实时结果:进程是处于执行期的程序以及相关的资源的总称:进程包括代码段和其他资源. 线程:是在进程中活动的对象. 2.执行线程,简称线程,是在进程中活动的对象.每个线程都拥有一个独立的程序计数器.进程栈和一组进程寄存器. 3.内核调度的对象是线程,而不是进程.Linux对线程并不特别区分,视其为特殊的进程 4.在现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存.在线程之间可以共享虚拟内存,但每个都拥…
网易云课堂linux内核分析第二周 20135103                王海宁 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 操作系统的核心功能就是:进程调度和中断机制,通过与硬件的配合实现多任务处理,再加上上层应用软件的支持,最终变成可以使用户可以很容易操作的计算机系统, my_timer_handler 函数会被内核周期性的调用,每调用1000次,就去将全局变量my_need_sched的值修…
LINUX内核分析第二周学习总结——操作系统是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.知识点总结 (一)计算机是如何工作的?(总结)——三个法宝 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那么重要,但有了高级语言及函数,堆栈成为了计算机的基础功能:…
linux内核分析第二周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1.函数调用堆栈 1.1小结 三把宝剑: 存储程序计算机 函数调用堆栈 中断机制 1.2堆栈 堆栈是C语言程序运行时必须的一个记录调用路径和参数的空间 函数条用框架 传递参数 保存返回地址 提供局部变量空间 C代码中嵌入汇编代码的写法 0. 内嵌汇编语法 as…
作者 彭东林 pengdonglin137@163.com 软件 Host: Ubuntu14.04 64 Qemu 2.8.0 Linux 2.6.24 busybox 1.24.2 gcc 4.4.7 概述 为了尽量还原<深入Linux内核架构>这本书的环境,我下载了Linux 2.6.24,由于这个内核版本比较老,所以用最新的gcc编译会有问题,所以需要安装一个比较老的gcc,从该内核的README得知,gcc的版本最少应该是3.2. 正文 一.安装GCC 使用apt-cache sea…
Linux内核分析第二周--操作系统是如何工作的 李雪琦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈 1. 小结:计算机是怎样工作的 三个法宝:存储程序计算机.函数调用堆栈.中断机制. 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构. 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那么重要,但有了高级语言…
Linux内核分析第二周学习博客 本周,通过实现一个简单的操作系统内核,我大致了解了操作系统运行的过程. 实验主要步骤如下: 代码分析: void my_process(void) { int i = 0; while(1) { i++; if(i%10000000 == 0) { printk(KERN_NOTICE "this is process %d -\n",my_current_task->pid); if(my_need_sched == 1) { my_need_…
如果系统只有一个处理器,那么给定时刻只有一个程序可以运行.在多处理器系统中,真正并行运行的进程数目取决于物理CPU的数目.内核和处理器建立了多任务的错觉,是通过以很短的间隔在系统运行的应用程序之间不停切换做到的.由此,以下两个问题必须由内核解决:除非明确要求,否则应用程序不能彼此干扰:CPU时间必须在各种应用程序之间尽可能公平共享(一些程序可能比其他程序更重要).本篇博文主要涉及内核共享CPU时间的方法以及如何在进程之间切换(内核为各进程分配时间,保证切换之后从上次撤销其资源时执行环境完全相同)…
Linux内核学习笔记二——进程   一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器. 内核调度的对象是线程而不是进程.对Linux而言,线程是特殊的进程. 二 进程描述符及任务结构 内核使用双向循环链表的任务队列来存放进程,使用结构体task_struct来描述进程所有信息. 1 进程描述符task_struct struct task_struct {}结构体相当大,大约1.7…
转自:http://blog.csdn.net/maray/article/details/5770889 Linux内核中断路径中不能睡眠,为什么? 这里就行了很深入的讨论,值得一看:http://bbs2.chinaunix.net/viewthread.php?tid=1618430 但是,他们的讨论最后没有得出一个明确的结论.其中,cskyrain在8楼 的思考触及到了一个要点,但是没有深入展开: 1楼 发表于 2009-11-24 20:36  | 只看该作者 一直认为中断处理函数不能…
task_struct结构: struct task_struct {   volatile long state;进程状态  void *stack; 堆栈  pid_t pid; 进程标识符  unsigned int rt_priority;实时优先级  unsigned int policy;调度策略  struct files_struct *files;系统打开文件  ... } 内核处理函数sys_clone:     系统调用通过do_fork实现进程的创建: return do…
"万子恵 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 " 万子恵 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验部分 跟踪调试 1)更新menu rm menu -rf //强制删除 git clone https://gi…
潘恒 原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 task_struct结构: struct task_struct {   volatile long state;进程状态  void *stack; 堆栈  pid_t pid; 进程标识符  unsigned int rt_priority;实时优先级  unsigned int policy;调度策略  struct files…
分析Linux内核创建一个新进程的过程 task_struct结构体分析 struct task_struct{ volatile long state; //进程的状态 unsigned long flags; //调用fork时候给出的进程号 long nice; //进程的基本时间片 unsigned long policy; //进程的调度策略 struct mm_struct *mm; //进程内存管理信息 struct list_head run_list; //指向运行队列的指针…
分析Linux内核创建一个新进程的过程 实验过程 要求:使用gdb跟踪分析一个fork系统调用内核处理函数sys_clone ,验证对Linux系统创建一个新进程的理解,推荐在实验楼Linux虚拟机环境下完成实验. cd LinuxKernel qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S 课程内容 阅读理解task_struct数据结构: 进程控制块PCB——task_struct 1.操作系统…
实验六:分析Linux内核创建一个新进程的过程 作者:王朝宪  <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 进程 1.进程即处于执行期的程序,并不局限于一个可执行的代码,是处于执行期程序以及其相关资源的总称. 2.Linux系统中,对于进程和线程并没有明显的区分,线程是一种特殊的进程. 3.Linux系统中,常用fork()进程创建子进程.调用fork()进程的成之为其子进程的父进程. 4.fork()继承…