国嵌linux内核编程,linux内核--那些年看国嵌视频学习
1、linux系统构成
由用户空间和内核空间构成。其中用户空间由应用程序和C库;内核空间由系统调用接口、kernel、架构代码、硬件设备平台
为什么linux系统会被划分为用户空间和内核空间?处于安全性考虑。
ARM的7种工作模式:1、usr用户模式:正常执行程序,一般程序运行在用户模式。
2、svc管理模式:操作系统使用的保护模式
3、sys 系统模式:类似管理员权限,可以运行特权的操作任务
4、IRQ外部中断模式:硬件上定时器、串口、输入等通常的中断处理
5、FIQ快速中断模式:应用于高速数据传输和存储 DMA
6、abt数据访问异常:当数据或指令预取终止进入该模式
7、und未定义指令模式:当未定义的指令被执行时,进入该模式
在不同模式,对寄存器的访问权限是不同的。例如:X86实现4个不同的级别:Ring0-Ring3.在Ring0下,可以执行特权指令(等同最高管理员),可以访问IO设备,在Ring3则有很多限制。Linux系统利用了CPU的这一特性,使用其中的两级分别运行内核与应用程序,这样使 操作系统本身得到充分保护。
例如:如果在X86平台运行,用户代码运行在权限最低的Ring3,而内核代码运行在权限最高的Ring0上,来实现内核安全性。
2、工作状态切换
如何实现用户空间与内核空间的工作状态切换?
内核空间和用户空间是程序执行的两种不同状态,通过系统调用和硬件中断完成用户空间到内核空间切换
系统调用:open()、read()等系统调用函数,硬件中断:比如uart中断、定时器中断等
3、linux内核构成
linux内核由进程管理、内存管理、架构代码、系统调用接口、设备驱动、网络协议栈、虚拟文件系统 共7部分组成。
详见下图:
系统调用接口:为用户空间提供访问内核空间的一套 标准系统调用函数,起到桥梁作用。
进程管理:1、重点创建进程(fork)、停止进程(kill、exit),2、控制进程间通信 3、进程调度(控制活动进程如何共享CPU)
内存管理:控制多个进程安全地共享内存区域
架构代码:该处代码同cpu类型有关。
网络协议栈:为linux提供丰富的网络协议。1、网络比较稳定 2、支持网络协议比较多 这是linux的强项
虚拟文件系统:隐藏各种文件系统的具体细节,为文件操作提供统一的接口。
国嵌linux内核编程,linux内核--那些年看国嵌视频学习相关推荐
- linux 应用层编程之内核链表list的使用
linux内核提供了一个经典通用的双向循环链表list的实现,任何模块都可以借助该接口实现自己的内部循环链表.因为是通用的,可以直接移植到用户态中使用,下面介绍相关的接口与一个简单操作例子,包括链表的 ...
- linux内核编程_内核线程kthread_run
linux内核编程_内核线程kthread_run 1. 简述: 2. 使用示例: 3. 详述: 1. 简述: 头文件: include/linux/kthread.h 数据类型: struct ta ...
- LINUX系统编程 LINUX 虚拟内存
LINUX 虚拟内存 以32位操作系统为例子,因为64位系统虚拟地址过大为2^64,32位仅仅为2^32=4G更利于描述,但是原理东西都一样 这首先要从程序和进程之间的关系开始,我们一般写好一段C\C ...
- Linux系统编程——Linux系统调用
系统调用概述 系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组"特殊"接口.用户程序可以通过这组"特殊"接口来获得操作系统内核提供的服务,比如用户可以 ...
- Linux模块编程-Linux(17)
前言 本博文的相关操作均是我亲为的来,你萌在跟着做的时候,如果遇到问题可以随时留言,一起探讨. 今天主要写一写Linux内核模块编程,是我的操作系统实验课内容,如果想要看看内核系统调用编程的,看这个 ...
- [Linux C编程]Linux文件锁
Linux C 文件锁 Linux系统中,文件上锁的函数有两个flock和fcntl ,前者主要是加建议性锁,后者既可以加建议性锁(默认)也可以加强制性锁,而且它还可以给某一记录进行上锁,即所谓的记录 ...
- linux图形编程,linux图形界面编程基本知识
以前看过这篇文章,不过当时没有博客,现在又一次看到了,记下来: http://hi.baidu.com/skychen1900/blog/item/9c7b94350a5fae1290ef39fb.h ...
- linux高性能网络编程,Linux高性能网络编程的介绍
Linux高性能网络编程 一.课程目标 本次课程深入讲解Linux下的socket编程,并以此为基础,着重讨论如何提高网络服务端应用的性能,通过本次课程的学习,学员将收获以下方面的成果: 熟练使用so ...
- Win64 驱动内核编程-8.内核里的其他常用
内核里的其他常用 1.遍历链表.内核里有很多数据结构,但它们并不是孤立的,内核使用双向链表把它们像糖 葫芦一样给串了起来.所以遍历双向链表能获得很多重要的内核数据.举个简单的例子,驱 动对象 Driv ...
最新文章
- 多分类f1分数_如何计算多标签分类中的F1测度?
- 深度学习将会变革NLP中的中文分词——TODO 待好好细看
- C++子类父类构造函数的关系
- C#——《C#语言程序设计》实验报告——Windows桌面编程——简单的计算器(仿Windows 10计算器)
- 后端开发(1)---大话后端开发的技巧大集合
- MongoDB 通过 Java 代码 CRUD 数据库与集合
- 【房价预测】基于matlab GUI BP神经网络房价预测【含Matlab源码 972期】
- 华为云认证题库哪里有?华为认证哪个级别好呢?
- 临渊羡鱼 不如退而结网
- hbase 和Hadoop的国内下载镜像
- php是什么币种的外汇英文,外汇币种英文_我要最常用的10个外汇币种和英文简称!_合拍网...
- 硼替佐米大鼠血清白蛋白RSA纳米粒|布立尼布小麦麦清白蛋白纳米粒|马赛替尼豆清白蛋白纳米粒(齐岳)
- 20种银河科幻风格ps字体样式
- 在股东协议中,如何设定关于股权转让的相关规定,如股东优先购买权、股权出售限制、股权转让审批流程等?
- Vue CLI3不兼容IE11打开空白报错SCRIPT1003: 缺少 ‘:‘
- html5写花,HTML5 盛放的花朵
- 微服务扩展之AKF拆分原则
- seo网站推广优化,网站页面的SEO优化怎么做
- JavaScript中BOM和DOM(持续更新)
- 使用icomoon引入字体图标及扩充字体图标的方法
热门文章
- java8 supplier_Java8 Supplier接口和Consumer接口原理解析
- JDK17遇到报错 module java.base does not “opens java.util“ to unnamed module 问题解决
- SpringBoot整合阿里云OSS
- ShengHuaOJ 1162百度车
- JS数字转大写中文“一,二,三“
- 如何使用低版本MATLAB软件打开高版本的Simulink文件
- 原生html5预览,小小地预览HTML5
- mysql中prepare_MySQL PREPARE语句
- 金桂香二度,橘黄蟹正肥,最是一年好景时
- 推出“微号”:曹国伟001号 微博或转型IM