Linux内核--系统调用/内核机制、进程

提示:本系列文章重点学习Linux内核


前言

提示:在这里先对Linux系统调用和Linux内核的任务做一个概述,以便大家能更好的理解:

嵌入式Linux系统调用是用户空间程序与内核空间之间进行交互的一种机制。在Linux系统中,用户空间和内核空间是两个独立的运行环境,系统调用是用户空间程序请求内核执行特定任务的途径之一。

Linux内核的任务

从技术层面讲,内核是硬件与软件之间的一个中间层。作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。
从应用程序的层面讲,应用程序与硬件没有联系,只与内核有联系,内核是应用程序知道的层次中的最底层。在实际工作中内核抽象了相关细节。
内核是一个资源管理程序。负责将可用的共享资源(CPU时间、磁盘空间、网络连接等)分配得到各个系统进程。
内核就像一个库,提供了一组面向系统的命令。系统调用对于应用程序来说,就像调用普通函数一样。


提示:以下是本篇文章将重点阐述Linux内核的系统调用/内核机制、进程

一、Linux系统调用

1.概念:

(1)用户空间(User Space):

用户空间是应用程序执行的环境,其中运行的程序可以访问有限的系统资源。这包括应用程序的代码、数据、堆栈等。用户空间的程序不能直接访问底层硬件,而是通过系统调用请求内核提供服务。

(2)内核空间(Kernel Space):

内核空间是操作系统内核执行的环境,它具有对系统硬件和资源的完全访问权限。内核负责管理系统的底层硬件、进程调度、内存管理等任务。

(3)系统调用(System Call):

系统调用是用户空间程序与内核空间进行通信的一种方式。它提供了一组接口,允许应用程序请求内核执行特权操作,如文件操作、网络通信等。

2.原理:

(1)用户空间到内核空间的切换:

当用户空间的程序需要执行一个系统调用时,它会通过软中断(软中断是一种通过软件触发的中断)或类似的机制触发内核空间的执行。这个切换的过程中,程序的执行流将从用户空间切换到内核空间。

(2)系统调用的执行:

一旦执行流进入内核空间,内核会根据系统调用的标识符找到相应的内核函数。这个内核函数执行特权操作,可能涉及底层硬件操作、资源管理等。执行完成后,结果返回给用户空间。

(3)系统调用的接口:

系统调用的接口通常是通过软中断号或指令来指定的。不同的系统调用有不同的标识符,内核根据这些标识符来确定要执行的具体操作。

(4)系统调用的参数传递:

用户空间向内核空间传递参数的方式通常是通过寄存器或堆栈。参数的传递方式取决于体系结构和具体的系统调用。

图解

在这里插入图片描述

总体来说,系统调用提供了一种安全可控的方式,使用户空间程序能够利用内核空间的功能,执行特权操作而不会直接危害系统的稳定性和安全性。了解这些概念和原理有助于理解嵌入式Linux系统中用户空间和内核空间之间的交互方式。

二、内核机制/进程

1.Linux内核的任务

从技术层面讲,内核是硬件与软件之间的一个中间层。作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。
从应用程序的层面讲,应用程序与硬件没有联系,只与内核有联系,内核是应用程序知道的层次中的最底层。在实际工作中内核抽象了相关细节。
内核是一个资源管理程序。负责将可用的共享资源(CPU时间、磁盘空间、网络连接等)分配得到各个系统进程。
内核就像一个库,提供了一组面向系统的命令。系统调用对于应用程序来说,就像调用普通函数一样。

2.内核实现策略

微内核:最基本的功能由中央内核(微内核)实现。所有其他的功能都委托给一些独立进程,这些进程通过明确定义的通信接口与中心内核通信。
宏内核:内核的所有代码,包括子系统(如内存管理、文件管理、设备驱动程序)都打包到一个文件中。内核中的每一个函数都可以访问到内核中所有其他部分。目前支持模块的动态装卸(裁剪)。Linux内核就是基于这个策略实现的。

3.内核机制使用

进程(在cpu的虚拟内存中分配地址空间,各个进程的地址空间完全独立;同时执行的进程数最多不超过cpu数目)之间进行通信,需要使用特定的内核机制。
进程间切换(同时执行的进程数最多不超过cpu数目),也需要用到内核机制。
进程切换也需要像FreeRTOS任务切换一样保存状态,并将进程置于闲置状态/恢复状态。
进程的调度。确认哪个进程运行多长的时间。

4.Linux进程

采用层次结构,每个进程都依赖于一个父进程。内核启动init程序作为第一个进程。该进程负责进一步的系统初始化操作。init进程是进程树的根,所有的进程都直接或者间接起源于该进程。
通过pstree命令查询。实际上得系统第一个进程是systemd,而不是init(这是因为现代Linux系统中,特别是使用systemd作为初始化系统(init系统)的系统,会出现不同的情况。systemd是一个功能强大的系统和服务管理器,它负责启动和管理系统上的所有进程。相较于传统的init系统,systemd提供了更先进的特性,例如并行启动、按需加载服务和更好的资源管理。由于它的广泛采用,现代Linux系统中很常见看到systemd作为第一个进程而不是传统的init。)
系统中每一个进程都有一个唯一标识符(ID),用户(或其他进程)可以使用ID来访问进程。

我是将军我一直都在,。!

  • 13
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值