20135320赵瀚青LINUX期中总结
期中总结
心得与体会
本学期的LINUX内核这门课程已经进行了一半,这门课的学习方法和上个学期深入理解计算机系统的方式差不多,所以也没有特别多不适应,LINUX内核在我看来,就是理解一个操作系统是如何实现各个功能的,先从宏观上让我们理解一下,LINUX操作系统,然后再让我们看看各个功能实现的代码和过程,包括进程的创建,进程的中断,进程的调度等等,每一节的实验,基本都是让我们跟踪一个进程的实现过程。网课基本上已经结束了,以后的日子,老师会布置新的任务,希望在日后的学习中,能够学习到更加有用的知识,让我们对LINUX的内核有更深刻地了解。
课本内容总结
第一章-Linux内核简介
Unix的历史
- 依旧被认为是最强大和最优秀的系统
- 由一个失败的操作系统Multics中产生
- 被移植到PDP-11型机中
- 由其他组织进一步开发
- 重写了虚拟内存系统,最终官方版本诞生
Linux简介
- 是一个非商业化产品
- LINUS是LINUX之父
- LINUX内核也是公开软件
操作系统和内核简介
- 用户界面是操作系统的外在表象,内核才是操作系统的内在核心。
- 系统其他部分必须依靠内核这部分软件提供的服务,像管理硬件设备、分配系统资源等。
- 当内核运行的时候,系统以内核态进入内核空间执行。而执行一个普通用户程序时,系统将以用户态进入以用户空间执行。
Linux内核和传统UNIX内核的比较
- Unix内核 几乎毫无例外的都是一个不可分割的静态可执行块 。也就是说,它们必须以完整、单独的可执行块的形式在一个单独的地址空间中运行。
- 单内核就是把它从整体上作为一个单独的大过程来实现,并同时运行在一个单独的地址空间。
- 微内核的功能被划分为独立的过程,每个过程叫做一个服务器。
- LINUX是单内核
第二章 从内核出发
获取内核源码 Git:下载和管理Linux内核源代码
获取最新提交到版本树的一个副本
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
下载代码后,更新自己的分支到最新分支
$ git pull
编译内核 配置内核——make与config
内核开发的特点
- 无libc库抑或标准头文件
- 没有内存保护机制
- 不轻易在内核中使用浮点数
- 容积小而固定的栈
- 同步和并发
- 可移植性
第五章 系统调用
- 系统调用:用户程序在需要的时候,通过系统调用来使用硬件设备。
中间层:作用三个
1.为用户空间提供一种硬件的抽象接口;
2.保证系统稳定和安全;
3.除异常和陷入,是内核唯一的合法入口。
用系统调用号指明到底执行哪个系统调用。
由int $0x80指令触发128号软中断。内核在执行系统调用时处于进程上下文。
第十八章 调试
- 内核中的bug:
引用空指针会产生一个oops;垃圾数据会导致系统崩溃。
定时限制和竞争条件都允许多个线程在内核中同时运行产生的结果。
oops
会向终端输出的内容:
- 1.错误消息;
- 2.寄存器中保存的信息;
- 3.可供跟踪的回溯线索。
通过打印来调试:printk()函数任何时候地方都可以调用它。
内核调试配置选项:内核开发菜单项中,依赖CONFIG_DEBUG_KERNEL。
系统请求键:sysctl来标记该特性的开或关(需要启用时:echo 1 > /proc/sys/kernel/sysrq)
内核调试器:gdb vmlinux /proc/kcore
使用Git进行二分搜索
第三章 进程管理
fork创造的子进程复制了父进程资源,包括内存及进程描述符的内容,资源的复制而不是指针的复制。
vfork的行为更像一个线程(指没有自已独立的内存空间),更明显的是vfork的调用将挂起当前进程(即父进程)。
clone根据flag的不同可以实现不同的功能。
只要退出,最终都调用了do_exit。
第四章 进程调度
一、调度策略
进程类型
I/O消耗型进程:大部分时间用来提交I/O请求或是等待I/O请求,经常处于可运行状态,但运行时间短,等待请求过程时处于阻塞状态。如交互式程序。
处理器消耗型进程:时间大都用在执行代码上,除非被抢占否则一直不停的运行。
综合型:既是I/O消耗型又是处理器消耗型。
调度策略要在:进程响应迅速(响应时间短)和最大系统利用率(高吞吐量)之间寻找平衡。
4.2 调度概念
优先级:基于进程价值和对处理器时间需求进行进程分级的调度。
时间片:表明进程被抢占前所能持续运行的时间,规定一个默认的时间片。时间片过长导致系统交互性的响应不好,
程序并行性效果差;时间片太短增大进程切换带来的处理器耗时。矛盾!
间片耗尽进程运行到期,暂时不可运行状态。直到所有进程时间片都耗尽,重新计算进程时间片。
Linux调度程序提高交互式程序优先级,提供较长时间片;实现动态调整优先级和时间片长度机制。
进程抢占:Linux系统是抢占式,始终运行优先级高的进程。
策略
- 决定调度程序在何时让进程运行。
I/O消耗型和处理器消耗型的进程
I/O消耗型:大多时间在提交或等待I/O请求。
处理器消耗型:大多时间在执行代码。不属于I/O驱动类型。
进程优先级
相同优先级按照轮转方式进行调度。
调度程序总是选择时间片未用尽且优先级高的进程运行。
时间片
nice值作为权重将调整进程所使用的处理器时间使用比。
I/O消耗型:不需要长的时间片。
处理器消耗型:需要越长越好的时间片。
调度策略的活动
文字编辑程序显然是 1/0 消耗型的,因为它大部分时间都在等待用户的键盘输入〈无论用户的输入速度有多快,都不可能赶上处理的速度λ 用户总是希望按下键系统就能马上响应。
视频编码程序是处理器消耗型的。
Linux调度算法
调度器类
以模块方式提供的,这样做的目的是允许不同类型的进程可以有针对性地选
择调度算哉。
Unix系统中的进程调度
公平调度
CFS的做怯是允许每个进程运行一段时间、循环轮转、选择运行最少的进程作为下一个运行进程,而不再采用分配给每个进程时间片的做法了,在所有可运行进程总数基础上计算出一个进程应该运行多久。 - -
nice 值在 CFS 中被
作为进程获得的处理器运行比的权重:越高的nice 值(越低的优先级)进程在得更低的处理器
使用权重。
可运行进程数量趋于无穷,每个最少也能获得 lms 的运行时间。
任何进程所获得的处理器时间是由它自己和其他所有可运行进程nice 值的相对差值决定的。
Linux调度的实现
时间记账
所有的调度器都必须对进程运行时间做记账。
CFS 使用调度器实体结构(定义在文件<linux/sched.h>的 struct_sched _entity 中)来追踪进程运行记账。
CFS 使用 vruntime 变量来记录一个程序到底运行了多长时间以及它还应该再运行多久。
定义在kemeVsched_fair.c 文件中的 update_curr()函数实现了该记账功能。
update_ currO 计算了当前进程的执行时间,并且将其存放在变量delta_exec 中,update_ curr()是囱系统定时器周期性调用。
调度器入口
主要入口点是函数schedule(),它定义在文件kemel/sched.c中。
睡眠和唤醒
睡眠:为了等待一些事件。
内核的操作都相同 2 进程把自己标记成休眠状态,从可执行红黑树中移出,放入等待队列,然后调用 schedule()选择和执行一个其他进程。
唤醒的过程刚好相反进程被设置为可执行状态,然后再从等待队列中移到可执行红黑树中。
用户抢占
用户抢占在以下情况时产生:
从系统调返回用户空间时;
从中断处理程序返回用户空间时;
内核抢占
内核抢占会发生在:
中断处理程序正在执行,且返回内核空间之前
内核代码再一次具有可抢占性
如果内核中的任务显式地调用 schedule()
如果内核中的任务阻塞(这同样也会导敖调用 schedule()
实时调度策略
两种策略
SCHED_FIFO和 SCHED_RR
SCHED_FIFO 实现了一种简单的、先入先出的调度算怯
SCHED_RR 是带有时闹片的 SCHED_FIFO,一种实时轮流调度算挂.
4.8 与调度相关的系统调用
与调度策略和优先级相关的系统调用
sched_setparam()和sched__getparam()分别用于设置和获取进程的实时优先级
20135320赵瀚青LINUX期中总结的更多相关文章
- 期末总结20135320赵瀚青LINUX内核分析与设计期末总结
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 对LINUX内核分析与设计这 ...
- 20135320赵瀚青LINUX第八周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周学习的是linux ...
- 20135320赵瀚青LINUX第七周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周学习的内容主要是讨 ...
- 20135320赵瀚青LINUX内核分析第一周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.概述 第一周的学习内容主 ...
- 三20135320赵瀚青LINUX内核分析第二周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.计算机的三个法宝 存储程 ...
- 20135320赵瀚青LINUX内核分析第三周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周是学习的主要是构造 ...
- 20135320赵瀚青LINUX内核分析第四周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周的内容主要是讲解系 ...
- 20135320赵瀚青LINUX第五周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 按照刘老师的周从三个角 ...
- 20135320赵瀚青LINUX第六周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 这周主要讲解的是进程. ...
随机推荐
- 《转》python学习(9)字典
转自 http://www.cnblogs.com/BeginMan/p/3156960.html 一.映射类型 我理解中的映射类型是:键值对的关系,键(key)映射值(value),且它们是一对多的 ...
- JS:“分享到”之类的悬浮框的运动原理(代码)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Java可视化JVM监控软件
jdk自带.jdk安装目录下 1.JConsole 选择 不安全 可用不多 2.VisualVM
- hdu5009 Paint Pearls[指针优化dp]
Paint Pearls Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- iOS - 常用iOS的第三方框架
图像:1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等 ...
- Win10安装软件时出现2502、2503错误代码的问题
主要是权限不够,C:\Windows\temp先访问权限 找到该目录,选择temp文件夹,右键弹出快捷菜单,选择“管理员取得所有权”.确定,OK. 再安装软件OK.
- jq简单城市二级联动实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- poj3349 Snowflake Snow Snowflakes【HASH】
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 49991 Accep ...
- GraphicsMagick 号称图像处理领域的瑞士军刀
标签: librarydelegatesimage图像处理fontstiff 2012-09-13 10:15 2496人阅读 评论(0) 收藏 举报 分类: java技术(52) 简介 ...
- Hotel---poj3667(线段树区间问题)
题目链接:http://poj.org/problem?id=3667 题意:酒店有n个房间,现有m个团队,每个团队需要连续 d 个房间,现在有两个操作,1:需要 d 个房间,2:从 x 开始连续 d ...