总结部分: 用户态和内核态: 前提知识:cpu有几种不同指令执行的级别 用户态:代码的掌控范围受限制 内核态:高级别,代码课执行特权指令,访问任意物理地址. 权限设置的意义:没有的话,系统容易啊崩溃,应用程序代码没有内核代码可靠 Linux有两种执行级别:0级(内核态)3级(用户态) Cs寄存器的最低两位表明当前代码的特权级别(一共可以表示四种) CPU每条指令的读取都是通过当前CS:eip这两个寄存器 逻辑地址空间,可以显著地分开用户态和内核态 0xc0000000以上只有内核态 0x0000…
实验部分: 首先运行结果截图 代码分析: Mypcb.h /* *  linux/mykernel/mypcb.h * *  Kernel internal PCB types * *  Copyright (C) 2013  Mengning * */ #define MAX_TASK_NUM        4 #define KERNEL_STACK_SIZE   1024*8 /* CPU-specific state of this task */ struct Thread { uns…
Linux及安全期中总结 黄晓妍 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第一周 计算机是如何工作的 http://www.cnblogs.com/angelahxy/p/5218575.html 冯诺依曼结构 将程序指令存储器和数据存储器合并在一起的存储器结构. 计算机是怎么工作的?存储器负责存储指令,cpu负责解释指令.它们通过总线连接. Cpu是如何解释指令:ABI:程序和…
学习计时:共24小时 读书:1小时 代码:8小时 作业:3小时 博客:12小时 一.学习目标 1. 能够独立安装Linux操作系统   2. 能够熟练使用Linux系统的基本命令   3. 熟练使用Linux中用户管理命令/系统相关命令/文件目录相关命令/打包压缩相关命令/比较合并相关命令/网络相关命令等 4. 熟练应用“搜索”进行举一反三的学习   二.学习资源 1. 课程资料:https://www.shiyanlou.com/courses/413   实验一,课程邀请码:W7FQKW4Y…
第四章 进程调度 进程调度程序是一个内核子系统 分配有限的处理器时间和资源 最大限度利用时间的原则(只要有可执行的进程,那么总会有进程执行) 基本工作:从一组处于等待(阻塞)状态的可执行进程中选择一个执行 4.1多任务 概念 能同时并发地交互执行多个程序的操作系统.(单处理机和多处理机上都可以实现) 多任务 抢占式任务 -进程调度程序能强制挂起正在执行的程序 -非抢占式任务 -除非进程自己主动停止运行,否则它一直运行 4.2Linux的进程调度 O(1)调度器 Linux2.5采用的新调度程序:…
第三章 (由于linux不区分进程和线程,所以它们在linux中被称为task,也叫任务) 总结:本章主要包括进程以及线程的概念和定义,Linux内核如何管理每个进程,他们在内核中如何被列举,如何创建,最终如何消亡.操作系统存在的意义在于运行用户程序,进程管理是所有操作系统的心脏所在. 3.1进程 进程是处于执行期的程序,是正在执行的程序代码的实时结果.但不仅局限于一段可执行的代码,还包括其他资源(打开的文件,挂起的信号,内核内部数据,处理器的状态,一个或者多个内存映射的内存地址空间,一个或者多…
实验部分 实验环境搭建 -rm menu -rf git clone https://github.com/megnning/menu.git cd menu 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:1234 ![](http://images2015.cnblo…
实验部分 首先clone最新的menu 我们可以看到,test.c里多了一个exec的功能,它的代码和fork基本一致,多了一项加载hello rootfs也有一些变化 执行一下exec 让我们启动一个冻结的menuOS 设置三个断点sys_execve;load_elf_binary;start_thread.启动起来之后,执行exec命令,跟踪 思考部分 新的可执行程序是从哪里开始执行的? 新的可执行程序是从程序的头部,也就是main函数开始执行的,被装载到内核的地址空间是0x8048x00…
总结部分: 操作系统内核三大功能: 进程管理,内存管理,文件系统 最核心的是进程管理 为了管理,首先要对每一个进程进行描述.进程描述符提供了所有内核需要了解的信息. 进程控制模块:task_struct(抽象task_struct的简化图) next_task,prev_task进程链表的管理 tty_struct控制台 fs_struct文件系统描述 file_struct打开的文件描述符 mm_struct内存管理的描述 signal_struct信号的描述 Linux-3.18.6/inc…
(注意:本文总结备份中有较多我手写笔记的图片,其中重要的部分打出来了.本文对分析system_call对应的汇编代码的工作过程,系统调用处理过程”的理解,以及流程图都写在实验部分.) 实验部分 使用gdb跟踪分析一个系统调用内核函数 强制删除menu (rm menu -rf) 更新menu代码至最新版本(git clone https://github.com/mengning/menu.git) 在test.c中main函数中增加MenuConfig,以及增加上周自己选择Getegid,Ge…