(笔记)Linux内核学习(一)之内核介绍
内核与操作系统:
内核是操作系统的核心部分,包含了系统运行的核心过程,决定系统的性能,操作系统启动内核被装入到RAM中;
操作系统与底层硬件设备交互和为运行应用程序提供执行环境。
Linux内核与微内核比较:
微内核:内核只需要一个很小的函数集,通常包括几个同步原语,一个简单的调度程序和进程间通信机制。
运行在微内核之上的几个系统进程实现系统级功能:内存分配,设备驱动程序……完全的模块化进程。任何操作
系统层都是独立的程序模块,通过模块化的方法定义明确清晰的软件接口与其它层交互。内核中暂且不需要执行
的系统进程可以被调出或者撤销。微内核便于移植和充分利用RAM,但开销大效率是个问题。
宏内核:Linux内核:单块结构。内核的全部代码,包括所有子系统(如内存管理、文件系统、设备驱动程序)
都打包到一个文件中。内核中的每个函数都可以访问内核中所有其他部分。模块特性依赖于内核与用户层之间设计
精巧的通信方法,这使得模块的热插拔和动态装载得以实现。
每个内核层都被继承到整个内核程序中,并代表着当前进程在内核态下运行。
模块化(非进程)——允许在运行状态下动态的安装。模块是一个目标文件,其代码在运行时链接到内核或从内核解除链接。
目标代码通常是一组函数组成,用来实现文件系统,驱动程序……这些模块与其他静态链接内核函数一样,代表着当前进程
在内核态下执行,直接函数调用避免进程切换消息传递的开销,效率可能更高。
Linux用户程序两种状态:
用户态和内核态;用户态切换到内核态:
l 进程系统调用
l CPU异常
l 中断
l 内核线程被执行
多用户系统:
能并发执行和独立的执行多个用户的应用程序,各个用户拥有独立空间。用户组,Root用户。
Linux进程:
进程Process:
l 操作系统的基本抽象。
l 进程是程序执行时的一个实例;一个运行程序的执行上下文。
l 几个进程能并发的执行同一个程序;而同一个进程能顺序执行几个程序。
l 具有独立的地址空间;多个进程可以同时执行。
进程受内核管理;每个进程由一个进程描述符表示,包含进程当前的状态信息。
当内核暂停一个进程的执行时,就把几个相关处理器寄存器的内容保存在进程描述符中。这些寄存器包括:
l 程序计数器PC和栈指针SP寄存器
l 通用寄存器
l 浮点寄存器
l 包含CPU状态信息的处理控制寄存器
l 跟踪进程对RAM访问的内存管理寄存器
当内核恢复执行进程时:将进程描述符中合适字段来装在CPU寄存器,根据程序计数器指向恢复到程序执行的地方。
Linux重入内核:
内核可重入:
可重入函数:使用局部变量
实现同步机制:信号量、锁、关中断
进程执行状态切换: 进程在用户态与内核态的转换,Linux是抢占式内核
进程地址空间:每个进程运行在似有地址空间
同步和临界区:内核数据操作访问。
进程间通信IPC:信号量、消息队列、共享内存
进程管理:fork与_exit,exec(),子进程与父进程
Linux文件系统:
文件系统是对存储设备上的数据和元数据进行组织的机制,以树形结构组织。
文件类型:
不同文件
目录
符号链接
面向块得设备文件 (设备驱动相关)
面向字符的设备文件 (设备驱动相关)
管道(pipe)和命名管道(named pipe)(进程间通信相关)
套接字(socket) (进程间通信相关)
文件访问权限和访问模式
文件描述符和索引节点:记录文件的信息数据。
文件操作的系统调用:open、read、write……
内存管理:
虚拟内存:处于应用程序内存请求与硬件内存单元之间的逻辑层。
随即访问存储器RAM:一部分用于内核映像,其余虚拟内存处理
内核内存分配器:KMA 处理内存请求子系统
l 速度快
l 减少内存浪费
l 减轻内存碎片
l 与其他内存管理合作(页框)
l 内存分配算法
进程虚拟空间地址处理:内核分配给进程的虚拟地址空间由以下内存区组成:
l 程序的可执行代码
l 程序的初始化数据
l 程序未初始化数据
l 初始化程序栈
l 所需共享库的可执行代码和数据
l 程序动态请求的内存堆
高速缓存:
设备驱动程序:
内核通过设备驱动程序与I/O设备交互,设备驱动程序在内核中,用户程序通过内核访问设备。
(笔记)Linux内核学习(一)之内核介绍的更多相关文章
- (笔记)Linux内核学习(九)之内核内存管理方式
一 页 内核把物理页作为内存管理的基本单位:内存管理单元(MMU)把虚拟地址转换为物理 地址,通常以页为单位进行处理.MMU以页大小为单位来管理系统中的也表. 32位系统:页大小4KB 64位系统:页 ...
- (笔记)Linux内核学习(七)之内核同步机制和实现方式
一 原子操作 指令以原子的方式执行——执行过程不被打断. 1 原子整数操作 原子操作函数接收的操作数类型——atomic_t //定义 atomic_t v;//初始化 atomic_t u = AT ...
- [linux基础学习]默认的目录介绍
以下用一个表格来罗列linux默认的目录或文件及其用途: 目录/文件 用途 来源 / /处于Linux文件系统树形结构的最顶端,它是Linux文件系统的入口,所有的目录.文件.设备都在/之下. - / ...
- [笔记]linux命令学习
scp /root/Downloads/cymothoa-1-beta.tar.gz root@192.168.1.66:/root/ rc.local exit 0前加入: sh /root/abc ...
- linux 驱动学习笔记01--Linux 内核的编译
由于用的学习材料是<linux设备驱动开发详解(第二版)>,所以linux驱动学习笔记大部分文字描述来自于这本书,学习笔记系列用于自己学习理解的一种查阅和复习方式. #make confi ...
- Linux内核学习笔记-1.简介和入门
原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...
- Linux内核学习笔记-2.进程管理
原创文章,转载请注明:Linux内核学习笔记-2.进程管理) By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...
- Linux内核学习笔记二——进程
Linux内核学习笔记二——进程 一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器 ...
- 20135316王剑桥Linux内核学习笔记
王剑桥Linux内核学习笔记 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 计算机是如何工作的 个人理 ...
随机推荐
- Shell中的>/dev/null 2>&1 与 2>&1 >/dev/null 与&>/dev/null 的区别
默认情况下,总是有三个文件处于打开状态,标准输入(键盘输入).标准输出(输出到屏幕).标准错误(也是输出到屏幕),它们分别对应的文件描述符是0,1,2 .那么我们来看看下面的几种重定向方法的区别: & ...
- MIRUO面试题
1.c#可以继承string类吗?2.接口可以实现接口吗?抽象类可以实现接口吗?抽象类可以实现实体类吗?3.用C#计算2.5的3次方的方法.4.什么是协同程序?5.GC是什么,如何减少内存,如何加快性 ...
- spring cloud——feign为GET请求时的对象参数传递
一.问题重现 楼主在使用feign进行声明式服务调用的时候发现,当GET请求为多参数时,为方便改用DTO对象进行参数传递.但是,在接口调用时feign会抛出一个405的请求方式错误: {"t ...
- spring boot + embed tomcat + standalone jar的内存泄露问题
前一阵遇到了一个很坑的内存泄露问题,记录于此: 有个项目采用spring cloud重构后,部署到线上(其中有一个接口,大概每天调用量在1千万次左右),发现zabbix监控里,linux的可用内存一直 ...
- 【荐】详解 golang 中的 interface 和 nil
golang 的 nil 在概念上和其它语言的 null.None.nil.NULL一样,都指代零值或空值.nil 是预先说明的标识符,也即通常意义上的关键字.在 golang 中,nil 只能赋值给 ...
- [Go] 理解 golang 中的 nil
nil是什么 相信写过Golang的程序员对下面一段代码是非常非常熟悉的了: if err != nil { // do something.... } 当出现不等于nil的时候,说明出现某些错误了, ...
- C# 数据结构基础-实现循环队列
队列 队列的概念是先进先出,这个应该不用多说了.看下面那个从网上找的现成图片. 循环队列 循环队列在逻辑上将队列中的数据摆成环形,如下图: 下面直接上代码. 队列 队列的概念是先进先出 ...
- sqlplus 执行 sql 文件
SQL>START file_name or SQL>@ file_name 1 .sqlplus system/system@srv 2. sql>@c:\a.sql (执行此 ...
- WordPress主题开发实例:获取当前分类的文章列表
思路: 如果使用默认的wordpress的方法,调出来的数据就会被后台的显示个数所限制,而我们需要的是自由控制文章数和翻页,所以我使用WP_Query 获取当前分类的方法可以通过 get_query_ ...
- Java的oauth2.0 服务端与客户端的实现
oauth原理简述 oauth本身不是技术,而是一项资源授权协议,重点是协议!Apache基金会提供了针对Java的oauth封装.我们做Java web项目想要实现oauth协议进行资源授权访问,直 ...