Linux期中总结
在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期中总结的更多相关文章
- 20135320赵瀚青LINUX期中总结
期中总结 心得与体会 本学期的LINUX内核这门课程已经进行了一半,这门课的学习方法和上个学期深入理解计算机系统的方式差不多,所以也没有特别多不适应,LINUX内核在我看来,就是理解一个操作系统是如何 ...
- Linux期中架构
1 在构建完模板后 开启虚拟机后 需要再重启一次 以解决网卡不能看见的问题 ########################################add begin 2018-05 ...
- Linux 期中架构 Ansible
ansible 自动化软件 基于Python开发 特点概述: 配置文件不需要过多配置 了解就可以了 ###部署ansble软件 ##受控主机部署 backup nfs01 web01 ...
- Linux 期中架构 SSH
为其他网络服务提供安全协议.替代Telnet SSH: 实现数据加密传输 22 默认支持root用户远程连接 类似sftp-server服务 nmap -p 22 10.0.0.41 nc 10 ...
- Linux 期中架构 PHP
环境 PHP安装前准备 先将需要的软件包如下位置放置.另外需要有WWW用户 参照nginx 满足以上条件后执行安装脚本 PHP安装脚本: #!/bin/bash #install PHP #au ...
- Linux 期中架构 MySQL
MySQL基础部分 mysql安装脚本 安装前请将相关安装包copy放到/server/tools目录下 -rw-r--r-- 1 root root 314149697 Mar 23 2017 ...
- Linux 期中架构 inotify
全网备份数据同步方案 备份网站内部人员信息 不能解决外部(人员)上传数据的备份 定时任务最短执行的周期为一分钟,采用定时任务方式,有时可能造成一分钟内的数据丢失 因此对于重要数据需要采用实时同步的方 ...
- Linux期中架构 全网备份案例
server端脚本 #!/bin/bash #1 进行数据完整性验证 并生成结果 find /backup -type f -name "finger.txt"| xargs md ...
- Linux 期中架构 rsync
上篇 Rsync rysnc查看版本 --version 全量 与增量在效率上有区别 cp mv scp --全量复制 rsync --增量复制 rsync利用的是quick ch ...
随机推荐
- 一步步教你上架iOS APP
注意,注意,注意:一定要设置Enable Xombie Objects为不勾选.在Edit Scheme中有一个Run,然后选择Diagnostics,然后取消勾选Enable Zombie Obje ...
- Beta冲刺! Day3 - 砍柴
Beta冲刺! Day3 - 砍柴 今日已完成 晨瑶:追查进度:确定推荐算法 昭锡:查看Note模块的处理逻辑.查找主页UI的解决方案 永盛:数据库的大量整合和新建,备份和还原:完成部分新的逻辑 立强 ...
- File类_深度遍历文件夹_练习
遍历指定目录下的所有文件和文件夹 import java.io.File; public class FileTest { public static void main(String[] args) ...
- [NOIP 2015]运输计划-[树上差分+二分答案]-解题报告
[NOIP 2015]运输计划 题面: A[NOIP2015 Day2]运输计划 时间限制 : 20000 MS 空间限制 : 262144 KB 问题描述 公元 2044 年,人类进入了宇宙纪元. ...
- Bootstrap收尾
一 响应式布局 二 Bootstrap补充 三 常用插件 一 响应式布局 响应式介绍 - 响应式布局是什么? 同一个网页在不同的终端上呈现不同的布局等 - 响应式怎么实现的? 1. CSS3 m ...
- NOIP2018爆零退役滚粗记
\(Day\ -1\) 非常的颓废 上午考了loli\(\ \ oi\)的最后一轮,\(mhr\)一个小时十五分钟怒切\(260\)分,吊打生爷 发现自己\(T2\)树的直径写怪了,不明觉厉 怕不是要 ...
- yii2 支付宝支付教程 [ 2.0 版本 ]
yii2 支付宝支付教程 [ 2.0 版本 ] 支付宝支付流程个人理解大致就这三步1.前台页面将支付信息数据通过立即支付按钮 ajax提交到订单处理层2.在订单处理层引用支付宝的接口 将支付数据写入 ...
- MongoDB逻辑操作符$or, $and,$not,$nor
$or是一个逻辑or操作符操作在一个数据或者多个表达式并且需要选择至少一个满足条件的表达式,$or有至少以下表达式: { $or: [ { <expression1> }, { <e ...
- Linux Sysstat性能监控工具安装及常见8个命令使用例子
Sysstat,一种常用在Linux系统服务器中的软件工具包,可以用来监控服务器的性能.比如可以监控CPU.硬盘.网络等数据,我们可以用来进行分析服务器的性能和资源的使用效率.老左将在这篇文章中学习. ...
- oracle批量插入数据(测试)
做数据库开发或管理的人经常要创建大量的测试数据,动不动就需要上万条,如果一条一条的录入,那会浪费大量的时间,本文介绍了Oracle中如何通过一条 SQL快速生成大量的测试数据的方法.产生测试数据的SQ ...