20135302魏静静——课本1-2章学习笔记

第一章 Linux内核简介

一、Unix

Unix是一个强大、健壮和稳定的操作系统。

Unix——支持抢占式多任务、多线程。虚拟内存、换页、动态链接和TCP/IP网络。

二、操作系统和内核简介

操作系统是指在整个系统中负责完成最基本功能和系统管理的那些部分。

内核独立于普通应用程序,一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限。
这种系统态和被保护起来的内存空间,统称为内核空间
在系统中运行的应用程序通过系统调用来与内核通信。

应用程序完成其工作的基本行为方式是:

应用程序通过系统调用界面陷入内核。

处理器的活动必然其下三者之一:

  • 运行于用户空间,执行用户进程
  • 运行于内核空间,处于进程上下文,代表某个特定的进程执行
  • 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断

第二章 从内核出发

一、获取内核源码

使用git获取源码:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

git pull # 更新分支到Linux的最新分支

安装解压:

tar xvjf linux-x.y.z.tar.bz2
或者
tar xvzf linux-x.y.z.tar.gz

打补丁:

patch -p1 < ../patch-x.y.z

二、编译内核

1.配置内核

  1. 字符页面的命令行工具:

    make config
  2. 图形界面工具
    make menuconfig

其他的几种配置:

make defconfig //基于默认配置
make oldconfig //验证和更新配置

2.编译内核

make

减少编译的垃圾信息——对输出进行重定向。

make > .. /detritus # 重定向到这个文件里了
make > /dev/null # 把无用的输出信息重定向到永无返回值的黑洞里。

3.安装新内核

make modules_install

System.map这个文件是一份符号对照表

三、内核开发的特点

  1. 内核开发时既不能访问C库也不能访问标准的C头文件
    应对:include/linux文件夹中包含了所需的内核头文件。
  2. 内核编程时必须使用GNU C
  3. 内核编程时缺乏像用户空间那样的内存保护机制
    内核中内存不分页。
  4. 内核编程时难以执行浮点运算
  5. 内核给每个进程只有一个很小的定长堆栈
  6. 由于内核支持异步中断、抢占和SMP,必须时刻注意同步和并发
    SMP:对称多处理系统。
    常用的解决竞争的方法:自旋锁信号量
  7. 要考虑可移植性的重要性
    诸如保持字节序,64位对其,不假定字长和页面长度等。
参考:http://www.cnblogs.com/20135202yjx/p/5272633.html
时间: 2024-10-13 07:22:48

20135302魏静静——课本1-2章学习笔记的相关文章

20135302魏静静——课本第4章学习笔记

第4章   进程调度 调度:调度是一个平衡的过程.一方面,它要保证各个运行的进程能够最大限度的使用CP:另一方面,保证各个进程能公平的使用CPU. 调度功能:决定哪个进程运行以及进程运行多长时间. 调度实现原理:与进程的优先级有关 Linux上调度实现的方法:O(1)的调度算法 调度相关的系统调用 4.1多任务   多任务系统可以划分为两类:非抢占式多任务( cooperative multitasking )和抢占式多任务(preemptive multitasking).像所 有Unix 的

20135302魏静静——课本第17章学习笔记

第17章   模块与设备 设备类型:在所有 Unix 系统中为了统一普通设备的操作所采用的分类. 模块: Linux 内核中用于按需加载和卸载目标码的机制. 内核对象:内核数据结构中支持面向对象的简单操作,还支持维护对象之间的父子关系. sysfs :表示系统中设备树的一个文件系统. 1. 设备类型 三种类型 块设备 字符设备 网络设备 2. 模块 1. Hello,World 模块的所有初始化函数必须符合形式:int my _ init (void); 退出函数必须符合形式:void my_e

20135302魏静静——课本第3章学习笔记

第三章   进程管理 本章主要内容: 进程和线程 进程的任务结构 进程和线程的创建 进程的终止 1. 进程和线程 进程:进程就是处于执行期的程序,实际上,进程就是正在执行的程序代码的实时结果: 线程:执行线程,简称线程,是进程中活动的对象(每个线程拥有独立的程序计数器.进程栈.和一组进程寄存器),内核调度的对象是线程,不是进程 进程提供2种虚拟机制:虚拟处理器和虚拟内存 每个进程有独立的虚拟处理器和虚拟内存, 每个线程有独立的虚拟处理器,同一个进程内的线程有可能会共享虚拟内存. 内核中进程的信息

20135302魏静静——课本5章学习笔记

第五章 系统调用 5.1 与内核通信 中间层 作用三个:1.为用户空间提供一种硬件的抽象接口:2.保证系统稳定和安全:3.除异常和陷入,是内核唯一的合法入口. 5.2 API.POSIX和C库 API定义了应用程序使用的编程接口(可实现系统调用). API.POSIX.C库与系统调用之间关系. 5.3 系统调用——syscall 5.3.1 系统调用号 当用户空间的进程执行一个系统调用,就用系统调用号指明到底执行哪个系统调用. sys_ni_syscall():错误号,负责“填补空缺”,返回-E

20135302魏静静——课本18章学习笔记

第十八章 调试 一.内核中的bug 内核bug的原因可能有: - 错误代码 - 同步时发生的错误,例如共享变量锁定不当 - 错误的管理硬件 - …… 内核bug发作的症状可能有: - 降低所有程序的运行性能 - 毁坏数据 - 使得系统处于死锁状态 - …… 内核开发比起用户开发要多考虑一些独特的问题,比如: - 定时限制 - 竞争条件 - …… 原因是允许多个线程在内核中同时运行. 二.通过打印来调试 1. 健壮性 弹性极佳的函数:任何时候.任何地方都能调用它 可以在中断上下文和进程上下文中被调

20135302魏静静——Linux课程期中总结

Linux期中总结 Linux课程第一周实验及总结:[http://www.cnblogs.com/20135302wei/p/5218607.html] 冯诺依曼体系结构的核心思想是存储程序计算机.在计算机中有两种指令,一是用户指令,一是系统调用. 当用户使用计算机时,计算机根据其汇编的指令一步步运行,当使用系统调用完后,再返回用户模式,保证系统的稳定. 程序中执行call的堆栈变化 汇编基础 通用寄存器 16位  32位 AX    eax 累加器BX    ebx 基址寄存器CX    e

【tapestry3笔记】--tapestry 初探,《 tapestry in action 》第一章学习笔记

由于要维护一个项目,要用到tapestry3这个老框架,虽然这个框架很老,但是在我看来ta的思想还是很先进的---面向组件编程. 由于网上资料少的可怜,辛苦找了很久终于找到一本名为<tapestry in action>的工具书,以下学习笔记均以此书为参考. 正文---tapestry初探 tapestry in action 第一章学习笔记 tapestry是一款以组件为核心的开发框架,组件就向一个黑盒子,我们无需关系组件是如何实现的,只需合理使用即可.这有点像jquery的插件,我们无需关

《Linux内核设计与实现》第一、二章学习笔记

<Linux内核设计与实现>第一.二章学习笔记 姓名:王玮怡  学号:20135116 第一章 Linux内核简介 一.关于Unix ——一个支持抢占式多任务.多线程.虚拟内存.换页.动态链接和TCP/IP网络的现代化操作系统 1.主要发展过程   1969年,贝尔实验室的程序员们设计了一个文件系统原型,最终发展演化成了Unix 1971年,Unix被移植到PDP-11型机中 1973年,整个Unix系统使用C语言进行重写,为后来Unix系统的广泛移植铺平了道路 Unix第六版(V6)被贝尔实

安卓权威编程指南 - 第五章学习笔记(两个Activity)

学习安卓编程权威指南第五章的时候自己写了个简单的Demo来加深理解两个Activity互相传递数据的问题,然后将自己的学习笔记贴上来,如有错误还请指正. IntentActivityDemo学习笔记 题目:ActivityA登录界面(用户名.密码.登陆按钮),ActivityB(Edit,返回按键:SubmitButton).A界面输入用户名和密码传到B中,B验证用户输入的用户名和密码,如果错误就返回A,并用Toast 显示用户名和密码错误:如果正确,就在第二个 activity中显示一个Edi