摘要: [20135337朱荟潼]原创作品转载请注明出处 第五章 系统调用 5.1 与内核通信 中间层 作用三个:1.为用户空间提供一种硬件的抽象接口:2.保证系统稳定和安全:3.除异常和陷入,是内核唯一的合法入口. 5.2 API.POSIX和C库 API定义了应用程序使用的编程接口(可实现系统调用). API.POSIX.C库与系统调用之间关系. 5.3 系统调用--syscall 5.3.1 系统调用号 当用户空间的进程执行一个系统调用,就用系统调用号指明到底执行哪个系统调用. sys_n…
第三章 进程管理 总结 fork创造的子进程复制了父进程资源,包括内存及进程描述符的内容,资源的复制而不是指针的复制. vfork的行为更像一个线程(指没有自已独立的内存空间),更明显的是vfork的调用将挂起当前进程(即父进程). clone根据flag的不同可以实现不同的功能. 只要退出,最终都调用了do_exit. 3.1 进程 进程:是处于执行期的程序以及它所包含的资源的总称. 线程:是在进程中活动的对象. 每个线程都拥有一个独立的程序计数器.进程栈和一组进程寄存器. 内核调度的对象是线…
第4章 进程调度 0. 总结 调度:调度是一个平衡的过程.一方面,它要保证各个运行的进程能够最大限度的使用CP:另一方面,保证各个进程能公平的使用CPU. 调度功能:决定哪个进程运行以及进程运行多长时间. 调度实现原理:与进程的优先级有关 Linux上调度实现的方法:O(1)的调度算法 调度相关的系统调用 4.1 多任务 能同时并发地交互执行多个进程. 非抢占式多任务:主动停止运行. 抢占式多任务:进程时间片. 4.2 Linux的进程调度 O(1)拥有数以十计的多处理器的环境,但缺少交互进程.…
第十八章 调试 0.总结 oops 内核的调试配置 用Git进行二分搜索 bug总会有,简洁描述发给LKML 1. 准备开始 在用户级的程序里,bug表现比较直接:在内核中却不清晰. 2. 内核中的bug 多种多样.变化多端. 引用空指针会产生一个oops:垃圾数据会导致系统崩溃. 定时限制和竞争条件都允许多个线程在内核中同时运行产生的结果. 3. 通过打印来调试 3.1 健壮性 printk()函数任何时候地方都可以调用它. 3.2 日志等级 printk()可以指定一个日志级别[与print…
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC 1000029000 一.学习内容 (一)给MenuOS增加time和time-asm命令(详见 :二.实验内容) 四步 1.更新menu代码到最新版: 2.在main函数中增加MenuConfig: 3.增加对应的Time函数和TimeAsm函数: 4.make rootfs. (二)使用gdb跟踪系统调用内核函数sys_time(详见 :二.实…
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC 1000029000 知识点梳理 一.用户态.内核态和中断处理过程 1.级别.如何区分 2.中断处理,用户态到内核态 3.保护现场和恢复现场 二.系统调用概述 1.操作系统为用户态进程与硬件设备进行交互提供了一组接口--系统调用 1.把用户从底层硬件编程中解放: 2.提高系统安全性: 3.用户程序具有可移植性: 2.API(应用编程接口)和系统调用…
第五章--系统调用 5.1 与内核通信 作用 1.为用户空间提供一种硬件的抽象接口 2.保证系统稳定和安全 3.除异常和陷入,是内核唯一的合法入口. API.POSIX和C库 关于Unix接口设计:提供机制而不是策略 5.3 系统调用 5.3.1系统调用号 当用户空间的进程执行一个系统调用,就用系统调用号指明到底执行哪个系统调用. sys_ni_syscall():错误号,负责"填补空缺",返回-ENOSYS,专门针对无效的系统调用. 存在sys_call_table. 5.3.2系统…
一.Unix历史 二.Linux足迹 类Linux系统.非商业化产品.用途广泛 三.操作系统和Linux内核简介 1.操作系统 (1)是指在整个最基本功能系统中负责完成最基本功能和系统管理的部分. (2)包括:内核.设备驱动程序.启动引导程序.命令行.用户界面.基本文件管理工具和系统工具. 2.内核--管理者/操作系统核心 (1)操作系统的内在核心. (2)组成:中断服务程序.调度程序.内存管理程序.系统服务程序. 3.linux由用户空间和内核空间组成 (1)通常内核空间和用户空间是程序执行的…
第七章--链接 0.总结 链接编译时可以采用静态链接或动态链接. 连接器主要任务:符号解析和重定位. 多个目标文件可定义相同的符号,可以被连接到一个单独的静态库. 链接器可以生成部分链接的可执行文件 动态链接器通过加载共享库和重定位程序中的引用来完成链接任务. 1.编译器驱动程序 编译系统提供的调用预处理器.编译器.汇编器和链接器来构造目标文件的程序. 2.静态链接 3.目标文件 三种形式: 1.可重定位目标文件: 2.可执行目标文件: 3.共享目标文件: 4.可重定位目标文件 ELF格式 5.…
1.获取内核源码 1.1Git 分布式的:下载和管理Linux内核源代码: - 获取最新提交到版本树的一个副本 $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git - 下载代码后,更新自己的分支到最新分支 $ git pull 1.2安装内核源代码 - 压缩形式为bzip2 运行:$ tar xvjf linux-x.y.z.tar.bz2 - 压缩形式为zip 运行:$ tar xvz…
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC-1000029000 1.冯诺依曼体系结构 ---核心:存储程序计算机 计算机在执行程序时须先将要执行的相关程序和数据放入内存储器中,在执行程序时CPU根据当前程序指针寄存器的内容取出指令并执行指令,然后再取出下一条指令并执行,如此循环下去直到程序结束指令时才停止执行.其工作过程就是不断地取指令和执行指令的过程,最后将计算的结果放入指令指定的存储器…
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC 1000029000 知识笔记 1.arch/ 支持不同的CPU的源代码--X86. 2.init/ 内核启动相关的代码基本在此目录下. main.c Linux内核启动的起点:start_kernel. start_kernel 相当于普通C程序的main(). mm/ 内存管理代码. kernel/ 与进程调度有关:Linux内核的核心代码在该…
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC 1000029000 第六周 进程的描述和进程的创建 一. 进程的描述 1. 进程控制块PCB--task_struct 1.操作系统的三大管理功能包括 进程管理 内存管理 文件系统 2.PCB task_struct中包含 进程状态 进程打开的文件 进程优先级信息 3.通过唯一的进程标识PID来区别每个进程. 4.进程状态 5.理解task_st…
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第七周 Linux内核如何装载和启动一个可执行程序 1. 理解编译链接的过程和ELF可执行文件格式,详细内容参考本周第一节: (1) 可执行程序怎么来的? linux系统中,可执行程序一般要经过预处理.编译.汇编.链接.执行等步骤. (2) 目标文件的格式ELF (3) 静态链接的ELF可执行文件与进程的地址空间 一般静态链…
第五章 系统调用 在操作系统中,内核提供了用户进程与内核进行交互的一组接口,这些接口在应用程序和内核之间扮演了使者的角色,保证系统稳定可靠,避免应用程序肆意妄行. 5.1 与内核通信 系统调用在用户空间进程和硬件设备之间添加一个中间层,该层有三个作用: 为用户空间提供了一种硬件的抽象接口 系统调用保证了系统的稳定和安全,对需要进行的访问进行裁决 系统调用是用户空间访问内核的唯一手段,除异常和陷入外,它们是内核唯一的合法入口 5.2 API.POSIX和C库 应用程序通过在用户空间实现的应用编程接…
---恢复内容开始--- 第五章 系统调用 一.与内核通信 1.系统调用在用户控件进程和硬件设备之间添加了一个中间层. 为用户空间提供了一种硬件的抽象接口 系统调用保证了系统的稳定和安全 每个进程都运行在虚拟系统中,而在用户控件和系统的其余部分提供这样一层公共接口 2.作用 在Linux中,系统调用是用户空间访问内核的唯一手段 . 二.API.POSIX和C库 Linux的系统调用作为C库的一部分提供.C库:Unix系统的主要API,包括标准C库函数和系统调用接口,即POSIXdM大部分API.…
第五章  系统调用 5.1与内核通信 1. 系统调用 让应用程序受限的访问硬件设备 提供创建新进程并与已有进程通信的机制 提供申请操作系统其他资源能力是用户空间进程和硬件设备之间的中间层 2. 系统调用的功能 1)硬件的抽象接口:用户程序通过系统调用来使用硬件,而不用关心具体的硬件设备,简化了用户程序的开发 2)保证系统的稳定与安全:基于某些规则的访问控制 3)增强系统的稳定性 在Linux中,系统调用是用户空间访问内核的唯一手段 除异常和陷入外,他们是内核唯一的合法入口 5.2 API.POS…
第五章主要学习了搭建S3C6410开发板的测试环境.首先要了解到S3C6410是一款低功耗.高性价比的RISC处理器它是基于ARMI1内核,广泛应用于移动电话和通用处理等领域. 开发板从技术上说与我们经常用的手机类似, 也包含显示屏. 键盘. Wi-Fi. 蓝牙等模块(可 能有的是选配〉.但与手机不同的是在开发板上安装嵌入式系统要比手机容易得多.而且一般开发 扳都有很多扩展的端口,可以很容易开发定制的硬件, 并与开发板链接.因此,开发板相对于孚机 来说,更适合对程序进行测试,尤其适合对底层的 L…
刚看完 UNIX 第五章内容,我想按照自己的方式将自己获得的知识梳理一遍,以便日后查看!先贴上一段简单的 TCP 服务器端代码: #include <sys/socket.h> #include <netinet/in.h> #include <stdio.h> #include <error.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #d…
一.计算机是如何工作的--总结 三个法宝 存储程序计算机.函数调用堆栈.中断机制 二.堆栈 1.是c语言程序运行时必须的一个记录调用路径和参数的空间. 函数调用框架.传递参数.保存返回地址.提供局部变量空间 2.相关寄存器 esp 堆栈指针 ebp 基址指针(记录当前函数调用基址) 3.操作 push 栈顶地址减少4个字节 pop 栈顶地址增加4个字节 4.其他寄存器 cs:eip 总是指向下一条的指令地址 -顺序:总是指向地址连续的下一条的指令地址: -跳转/分支:根据程序需要被修改: cal…
第八周 进程的切换和系统的一般执行过程 一.进程切换关键代码switch_to 1.不同类型进程有不同调度需求--两种分类 2.调度策略--规则 Linux中进程优先级是动态的,周期性调整. 3.时机 schedule()函数负责调度. 中断处理过程(包括时钟中断.I/O中断.系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule(): 内核线程可以直接调用schedule()进行进程切换,也可以在中断处理过程中进行调度,也就是说内…
第四章 进程调度 一.多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统.多任务操作系统使多个进程处于堵塞或者睡眠状态,实际不被投入执行,这些任务尽管位于内存,但是并不处于可运行状态.多任务系统分类: 非抢占式多任务 抢占式多任务 1.抢占式多任务 Linux提供了抢占式的多任务模式,由调度程序来决定什么时候停止一个进程的运行.几个相关概念: 抢占:强制的挂起动作 时间片:预先设置好的,进程被抢占之前能够运行的时间,实际上就是分配给每个可运行进程的处理器时间段 动态时间片计算的方式…
Vim编辑器 Vim 仅仅通过键盘来在插入和执行命令等多种模式之间切换.这使得Vim可以不用进行菜单或者鼠标操作,并且最小化组合键的操作,对文字录入员或者程序员可以大大增强速度和效率. CHAPTER 1.VIM快速入门 一.Vim的六种基本模式 1.普通模式 Vim的普通模式用的编辑器命令,比如移动光标,删除文本等等.这也是Vim启动后的默认模式,而不是大多数编辑器的插入模式. 普通模式命令往往需要一个操作符结尾. 普通模式进入插入模式的方法:a键(append/追加)键或者i(insert/…
第三章 进程管理 3.1 进程 进程的定义: 是处于执行期的程序以及它所包含的资源的总称. 线程的定义: 是在进程中活动的对象. 每个线程都拥有一个独立的程序计数器.进程栈和一组进程寄存器. 内核调度的对象是线程,而不是进程. 3.2 进程描述符及任务结构 进程描述符的结构:task_struct,定义在<linux/sched.h>中,包含一个具体进程的所有信息. task_struct 就是指 PCB (进程控制块). 3.2.1 分配进程描述符 thread_info结构在文件<a…
概述 什么是进程调度 进程调度:在可运行态进程之间分配有限处理器时间资源的内核子系统. 一.调度策略 4.1进程类型 I/O消耗型进程:大部分时间用来提交I/O请求或是等待I/O请求,经常处于可运行状态,但运行时间短,等待请求过程时处于阻塞状态.如交互式程序. 处理器消耗型进程:时间大都用在执行代码上,除非被抢占否则一直不停的运行. 综合型:既是I/O消耗型又是处理器消耗型. 调度策略要在:进程响应迅速(响应时间短)和最大系统利用率(高吞吐量)之间寻找平衡. 4.2 调度概念 优先级:基于进程价…
其实大多数的编译器本身就能提供一些简单的优化,比如gcc就能通过使用 -O2 或者 -O3 的选项来优化程序.但编译器的优化始终也是有限,因为它必须小心翼翼保证优化过程不对程序的功能有改动.故而程序员本身应该对程序有优化意识.在我看来,这也是应该有的一种良好的编程习惯. 几种比较简单的优化措施: 1.代码移动 将要执行多次(比如在循环中)但计算结果不会改变的计算,移动到代码前面不会多次求值的部分.举一个比较极端的例子: /* convert string to lowercase: slow*/…
20135337朱荟潼 实验二 Java面向对象程序设计 一.实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 二.实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等…
<Linux内核设计与实现>课本第五章学习笔记 By20135203齐岳 与内核通信 用户空间进程和硬件设备之间通过系统调用来交互,其主要作用有三个. 为用户空间提供了硬件的抽象接口. 保证了系统的稳定和安全. 实现多任务和虚拟内存.保证良好的稳定性和安全性. 系统调用是用户空间访问内核的唯一手段:除异常和陷入外,是内核唯一合法的入口. API.POSIX和C库 应用程序通过在用户空间实现的应用编程接口(API)而非直接通过系统调用来编程. POSIX是应用编程接口的一个国际标准,C库提供了P…
<Linux内核设计与实现>第五章学习笔记 姓名:王玮怡  学号:20135116 一.与内核通信     在Linux中,系统调用是用户空间访问内核的唯一手段:除异常和陷入外,它们是内核的唯一合法入口. 二.API.POSIX.C库 1.API 一般情况下,应用程序通过在用户空间实现的应用编程接口(API)来编程,而不是直接通过系统调用. 2.POSIX 在Unix世界中,最流行的应用编程接口是基于POSIX标准的. 3.C库 C库实现了Unix系统的主要API,包括标准C库函数和系统调用接…