在MOOC八周内容高度概括总结如下

(一)计算机是如何工作的

  • 冯诺依曼体系结构——核心:存储程序计算机;

  • X86汇编基础

(二)操作系统是如何工作的

  • 三个法宝——存储程序计算机、函数调用堆栈、中断机制;

  • 在my_schedule函数中,完成进程的切换。进程的切换分两种:

    1.下一个进程没有被调度过;
    2.下一个进程被调度过,可以通过下一个进程的state知道其状态。

    进程切换通过内联汇编代码实现,需要保存之前的进程的eip和堆栈,然后将新进程的eip和堆栈的值存入相对应的寄存器中。

(三) Linux内核源代码简介

  • sched_init()进程调度初始化函数,函数内关键的初始化——对0号进程,即idle进程进行初始化;

  • rest_init()其他初始化函数,函数内将创建1号进程,即init进程;

  • 内核的启动过程:

    rest_init实际是start_kernel内核一启动的时候会一直存在,这个就叫0号进程;0号进程创建了1号进程kernel_init和其他服务线程。

  • 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)
    -s shorthand for -gdb tcp::1234 若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项

    gdb

    (gdb)file linux-3.18.6/vmlinux # 在gdb界面中targe remote之前加载符号表

    (gdb)target remote:1234 # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行

    (gdb)break start_kernel # 断点的设置可在target remote之前,也可在后

(四) 扒开系统调用的三层皮(上)

  • 三层皮:API xyz,中断向量system_call,中断服务程序sys_xyz

  • 系统是通过中断的方式将用户态转换为内核态,并通过调用系统函数来实现系统功能。

  • 系统调用是一个软中断,中断号是0x80——通过int 0x80,触发系统调用。

  • 嵌入汇编格式为:

    asm ( assembler template
    : output operands /* optional /
    : input operands /
     optional /
    : list of clobbered registers /
     optional */
    );

(五) 扒开系统调用的三层皮(下)

  • set_system_trap_gate,设置系统陷阱门,即系统调用。

  • 使用gdb跟踪

    make rootfs:自动编译,生成根文件系统,自动启动.
    (gdb)list 查看代码.
    (gdb)s 单步调试进入函数体.
    (gdb)n 单步调试不进入函数体.

  • 给MenuOS增加time和time-asm命令、添加了fork

(六) 进程的描述和进程的创建

  • 操作系统的三大管理功能:进程管理、内存管理、文件系统;

  • PCB task_struct中:进程状态、进程打开的文件、进程优先级信息;

  • PID唯一的标识进程;

  • 创建一个新进程在内核中的执行过程

    1.使用系统调用clone、fork、vfork均可创建一个新进程,但都是通过调用do_fork来实现进程的创建;
    2.复制父进程PCB--task_struct来创建一个新进程,要给新进程分配一个新的内核堆栈;
    3.修改复制过来的进程数据,比如pid、进程链表等等执行copy_process和copy_thread
    4.p->thread.sp = (unsigned long) childregs; //调度到子进程时的内核栈顶
    p->thread.ip = (unsigned long) ret_from_fork; //调度到子进程时的第一条指令地址

(七) 可执行程序的装载

  • Linux内核装载和启动一个可执行程序

    1.创建新进程
    2.新进程调用execve()系统调用执行指定的ELF文件
    3.调用内核的入口函数sys_execve(),sys_execve()服务例程修改当前进程的执行上下文;
    (以上系统调用终止后,新进程开始执行放在可执行文件中的代码。)

  • 当ELF被load_elf_binary()装载完成后,函数返回至do_execve()在返回至sys_execve()。ELF可执行文件的入口点取决于程序的链接方式:

    1.静态链接:elf_entry就是指向可执行文件里边规定的那个头部,即main函数处。
    2.动态链接:可执行文件是需要依赖其它动态链接库,elf_entry就是指向动态链接器的起点。

(八) 进程的切换和系统的一般执行过程

    • schedule()函数负责调度;

    • linux系统的一般执行过程:

      X正在运行--->发生中断,可能陷入内核,CPU自动保存加载--->SAVE_ALL保存现场--->调用schedule,switch_to进程上下文切换--->标号1之后运行Y(之前有进行准备动作)--->restore_all恢复现场--->iret- pop cs:eip/ss:esp/eflags from kernel stack--->继续运行用户态进程Y

    • 特殊情况

      通过中断处理过程中的调度时机,用户态进程与内核线程之间互相切换和内核线程之间互相切换,与最一般的情况非常类似,只是内核线程运行过程中发生中断没有进程用户态和内核态的转换;

      内核线程主动调用schedule(),只有进程上下文的切换,没有发生中断上下文的切换,与最一般的情况略简略;

      创建子进程的系统调用在子进程中的执行起点及返回用户态,如fork;

      加载一个新的可执行程序后返回到用户态的情况,如execve

Linux期中总结的更多相关文章

  1. 20135320赵瀚青LINUX期中总结

    期中总结 心得与体会 本学期的LINUX内核这门课程已经进行了一半,这门课的学习方法和上个学期深入理解计算机系统的方式差不多,所以也没有特别多不适应,LINUX内核在我看来,就是理解一个操作系统是如何 ...

  2. Linux期中架构

    1    在构建完模板后  开启虚拟机后 需要再重启一次  以解决网卡不能看见的问题 ########################################add begin 2018-05 ...

  3. Linux 期中架构 Ansible

    ansible  自动化软件   基于Python开发 特点概述: 配置文件不需要过多配置  了解就可以了 ###部署ansble软件 ##受控主机部署 backup   nfs01   web01 ...

  4. Linux 期中架构 SSH

    为其他网络服务提供安全协议.替代Telnet SSH:   实现数据加密传输 22  默认支持root用户远程连接 类似sftp-server服务 nmap -p 22 10.0.0.41 nc 10 ...

  5. Linux 期中架构 PHP

    环境 PHP安装前准备  先将需要的软件包如下位置放置.另外需要有WWW用户   参照nginx 满足以上条件后执行安装脚本 PHP安装脚本: #!/bin/bash #install PHP #au ...

  6. Linux 期中架构 MySQL

     MySQL基础部分 mysql安装脚本 安装前请将相关安装包copy放到/server/tools目录下 -rw-r--r-- 1 root root 314149697 Mar 23  2017 ...

  7. Linux 期中架构 inotify

    全网备份数据同步方案 备份网站内部人员信息  不能解决外部(人员)上传数据的备份 定时任务最短执行的周期为一分钟,采用定时任务方式,有时可能造成一分钟内的数据丢失 因此对于重要数据需要采用实时同步的方 ...

  8. Linux期中架构 全网备份案例

    server端脚本 #!/bin/bash #1 进行数据完整性验证 并生成结果 find /backup -type f -name "finger.txt"| xargs md ...

  9. Linux 期中架构 rsync

    上篇 Rsync rysnc查看版本   --version 全量  与增量在效率上有区别 cp mv scp  --全量复制 rsync       --增量复制 rsync利用的是quick ch ...

随机推荐

  1. cglib之Enhancer

    1. 背景 cglib库的Enhancer在Spring AOP中作为一种生成代理的方式被广泛使用.本文针对Enhancer的用法以实际代码为例作一些介绍. 2. Enhancer是啥 Enhance ...

  2. ajaxForm和ajaxSubmit 粘贴就可用

    <!--To change this template, choose Tools | Templatesand open the template in the editor.-->&l ...

  3. nginx与location语法详解

    Location语法优先级排列 匹配符 匹配规则 优先级 = 精确匹配 ^~ 以某个字符串开头 ~ 区分大小写的正则匹配 ~* 不区分大小写的正则匹配 !~ 区分大小写不匹配的正则 !~* 不区分大小 ...

  4. date日期 格式化

    这个是别人写的,我拿过来用的,哈哈 Date.prototype.format = function(fmt) { var o = { "M+" : this.getMonth() ...

  5. 1-微信小程序开发(安装软件和运行第一个微信小程序)

    https://developers.weixin.qq.com/miniprogram/dev/ 我的 打开 上传成功后

  6. php计算utf8字符串长度

    strlen()函数计算中文字符不太友好.扩展的mb_strlen()函数可以补充这个.如果没有这个扩展,也可以利用正则匹配分解. 函数如下: // 对utf-8字符的长度 function utf8 ...

  7. 常见camera测试卡

    常见camera测试卡     版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/luckywang1103/article/details/87166 ...

  8. Luogu4774 NOI2018 屠龙勇士 ExCRT

    传送门 原来NOI也会出裸题啊-- 用multiset求出对付每一个BOSS使用的武器威力\(ATK_i\),可以得到\(m\)个式子\(ATK_ix \equiv a_i \mod p_i\) 看起 ...

  9. 使用Win PE修改其他硬盘中的系统注册表

    使用场景:原来装的机械硬盘系统盘为C盘,后来买了个SSD固态硬盘后,进入WinPE系统后,把原来的C盘整个复制到了固态硬盘,然后用BooticeX64.exe工具在UEFI启动中增加SSD固态硬盘中的 ...

  10. NoSql的三大基石:CAP理论&BASE&最终一致性

    关系型数据库的局限 NoSql出现在关系型数据库之后,主要是为了解决关系型数据库的短板,我们先来看看随着软件行业的发展,关系型数据库面临了哪些挑战: 1.高并发 一个最典型的就是电商网站,例如双11, ...