此为个人学习笔记存档! week 6 进程的描述与创建 一.进程的描述 1.进程控制块task_struct 以下内容来自视频课件,存档在此. 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. struct task_struct数据结构很庞大 Linux进程的状态与操作系统原理中的描述的进程状态似乎有所不同,比如就绪状态和运行状态都是TASK_RUNNING,为什么呢? 进程的标示pid 所有进程链表struct list_head tasks; 内核的…
此为个人学习笔记存档 week 2 操作系统是怎么工作的 一.计算机是如何工作的?--三个法宝 (一)三个法宝 1.存储程序计算机 所有计算机的基础性的逻辑框架. 2.函数调用堆栈 在低级语言中并不很重要,但是堆栈技术是高级语言可以运行的基础. 3.中断机制 有了中断后,就有了多道程序设计 每个程序有自己的执行流. 中断发生时,cpu把当前的eip等压入内核堆栈中,然后把eip指向中断处理程序的入口. (二)深入理解函数调用堆栈 1.堆栈 堆栈是c语言程序运行时必须的一个记录调用路径和参数的空间…
第四章 进程调度 一.多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统. 多任务操作系统使多个进程处于堵塞或者睡眠状态,实际不被投入执行,这些任务尽管位于内存,但是并不处于可运行状态. 多任务系统分类: 非抢占式多任务 抢占式多任务 1.抢占式多任务 Linux提供了抢占式的多任务模式,由调度程序来决定什么时候停止一个进程的运行. 几个相关概念: 抢占:强制的挂起动作 时间片:预先设置好的,进程被抢占之前能够运行的时间,实际上就是分配给每个可运行进程的处理器时间段 动态时间片计算…
week 6 实验:分析Linux内核创建一个新进程的过程 1.使用gdb跟踪创建新进程的过程 准备工作: rm menu -rf git clone https://github.com/mengning/menu.git # 更新Menu cd menu mv test_fork.c test.c # 把test.c覆盖掉 make rootfs 执行fork,可以看到父进程子进程都输出了信息. 下面进行gdb调试: qemu -kernel linux-3.18.6/arch/x86/bo…
第三章 进程管理 一.进程 1.进程 进程就是处于执行期的程序. 进程就是正在执行的程序代码的实时结果. 进程是处于执行期的程序以及相关的资源的总称. 进程包括代码段和其他资源. 2.线程 执行线程,简称线程,是在进程中活动的对象. 内核调度的对象是线程而不是进程. Linux对线程并不特别区分,视其为特殊的进程. 3.虚拟处理器和虚拟内存 在现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存. 包含在同一个进程中的线程可以共享虚拟内存,但是每个都拥有各自的虚拟处理器. 4.几个函数 f…
week 7 实验:Linux内核如何装载和启动一个可执行程序 1.环境搭建: rm menu -rf git clone https://github.com/megnning/menu.git cd menu ls mv test_exec.c test.c vi test.c // 可以看到增加了一个exec的程序,只比fork程序多了一个execlp vi Makefile // 查看Makefile的更改,加入了hello make rootfs 执行exec后,出现了hello wo…
期中总结 前半学期的主要学习内容是学习mooc课程<Linux内核分析>以及课本<Linux内核设计与实现>. 所涉及知识点总结如下: 1. Linux内核启动的过程--以MenuOS为例 1.1 计算机的启动过程 CPU启动后,BIOS程序开始执行,检测硬件,然后加载引导程序BootLoader和硬盘的第一个扇区MBR. BootLoader会将操作系统初始化,启动操作系统. Linux内核的启动有三个参数: kernel initrd root所在目录.分区. 内核会首先生成0…
一个简单的时间片轮转多道程序内核代码及分析 所用代码为课程配套git库中下载得到的. 一.进程的启动 /*出自mymain.c*/ /* start process 0 by task[0] */ pid = 0; my_current_task = &task[pid]; asm volatile( "movl %1,%%esp\n\t" /* 将进程的sp赋给esp寄存器 */ "pushl %1\n\t" /* ebp入栈:因为在这里栈为空,esp=e…
实验三:跟踪分析Linux内核的启动过程 一.调试步骤如下: 使用gdb跟踪调试内核 qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S # 关于-s和-S选项的说明: // -S freeze CPU at startup (use 'c' to start execution) cpu初始化之前把它冻结起来 // -s shorthand for -gdb tcp::1234 在1234端口上建立了…
week 8 实验:理解进程调度时机跟踪分析进程调度与进程切换的过程 1.环境搭建: rm menu -rf git clone https://github.com/megnning/menu.git cd menu ls make rootfs qemu -kernel ../linux-3.18.6/arch/x86/boot/bzImage -initrd ../rootfs.img -s -S gdb file ../linux-3.18.6/vmlinux target remote…