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内核--那些年看国嵌视频学习相关推荐

  1. linux 应用层编程之内核链表list的使用

    linux内核提供了一个经典通用的双向循环链表list的实现,任何模块都可以借助该接口实现自己的内部循环链表.因为是通用的,可以直接移植到用户态中使用,下面介绍相关的接口与一个简单操作例子,包括链表的 ...

  2. linux内核编程_内核线程kthread_run

    linux内核编程_内核线程kthread_run 1. 简述: 2. 使用示例: 3. 详述: 1. 简述: 头文件: include/linux/kthread.h 数据类型: struct ta ...

  3. LINUX系统编程 LINUX 虚拟内存

    LINUX 虚拟内存 以32位操作系统为例子,因为64位系统虚拟地址过大为2^64,32位仅仅为2^32=4G更利于描述,但是原理东西都一样 这首先要从程序和进程之间的关系开始,我们一般写好一段C\C ...

  4. Linux系统编程——Linux系统调用

    系统调用概述 系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组"特殊"接口.用户程序可以通过这组"特殊"接口来获得操作系统内核提供的服务,比如用户可以 ...

  5. Linux模块编程-Linux(17)

    前言 本博文的相关操作均是我亲为的来,你萌在跟着做的时候,如果遇到问题可以随时留言,一起探讨. 今天主要写一写Linux内核模块编程,是我的操作系统实验课内容,如果想要看看内核系统调用编程的,看这个 ...

  6. [Linux C编程]Linux文件锁

    Linux C 文件锁 Linux系统中,文件上锁的函数有两个flock和fcntl ,前者主要是加建议性锁,后者既可以加建议性锁(默认)也可以加强制性锁,而且它还可以给某一记录进行上锁,即所谓的记录 ...

  7. linux图形编程,linux图形界面编程基本知识

    以前看过这篇文章,不过当时没有博客,现在又一次看到了,记下来: http://hi.baidu.com/skychen1900/blog/item/9c7b94350a5fae1290ef39fb.h ...

  8. linux高性能网络编程,Linux高性能网络编程的介绍

    Linux高性能网络编程 一.课程目标 本次课程深入讲解Linux下的socket编程,并以此为基础,着重讨论如何提高网络服务端应用的性能,通过本次课程的学习,学员将收获以下方面的成果: 熟练使用so ...

  9. Win64 驱动内核编程-8.内核里的其他常用

    内核里的其他常用 1.遍历链表.内核里有很多数据结构,但它们并不是孤立的,内核使用双向链表把它们像糖 葫芦一样给串了起来.所以遍历双向链表能获得很多重要的内核数据.举个简单的例子,驱 动对象 Driv ...

最新文章

  1. 多分类f1分数_如何计算多标签分类中的F1测度?
  2. 深度学习将会变革NLP中的中文分词——TODO 待好好细看
  3. C++子类父类构造函数的关系
  4. C#——《C#语言程序设计》实验报告——Windows桌面编程——简单的计算器(仿Windows 10计算器)
  5. 后端开发(1)---大话后端开发的技巧大集合
  6. MongoDB 通过 Java 代码 CRUD 数据库与集合
  7. 【房价预测】基于matlab GUI BP神经网络房价预测【含Matlab源码 972期】
  8. 华为云认证题库哪里有?华为认证哪个级别好呢?
  9. 临渊羡鱼 不如退而结网
  10. hbase 和Hadoop的国内下载镜像
  11. php是什么币种的外汇英文,外汇币种英文_我要最常用的10个外汇币种和英文简称!_合拍网...
  12. 硼替佐米大鼠血清白蛋白RSA纳米粒|布立尼布小麦麦清白蛋白纳米粒|马赛替尼豆清白蛋白纳米粒(齐岳)
  13. 20种银河科幻风格ps字体样式
  14. 在股东协议中,如何设定关于股权转让的相关规定,如股东优先购买权、股权出售限制、股权转让审批流程等?
  15. Vue CLI3不兼容IE11打开空白报错SCRIPT1003: 缺少 ‘:‘
  16. html5写花,HTML5 盛放的花朵
  17. 微服务扩展之AKF拆分原则
  18. seo网站推广优化,网站页面的SEO优化怎么做
  19. JavaScript中BOM和DOM(持续更新)
  20. 使用icomoon引入字体图标及扩充字体图标的方法

热门文章

  1. java8 supplier_Java8 Supplier接口和Consumer接口原理解析
  2. JDK17遇到报错 module java.base does not “opens java.util“ to unnamed module 问题解决
  3. SpringBoot整合阿里云OSS
  4. ShengHuaOJ 1162百度车
  5. JS数字转大写中文“一,二,三“
  6. 如何使用低版本MATLAB软件打开高版本的Simulink文件
  7. 原生html5预览,小小地预览HTML5
  8. mysql中prepare_MySQL PREPARE语句
  9. 金桂香二度,橘黄蟹正肥,最是一年好景时
  10. 推出“微号”:曹国伟001号 微博或转型IM