Linux学习笔记(1)--用户态与内核态

在Linux系统中,虚拟地址空间的内部被分为内核空间和用户空间,内核空间和用户空间是分开的,内核态控制的是内核空间的资源管理,用户态访问的是用户空间内的资源。用户态每个进程都有完全属于自己的、独立的、不被干扰的内存空间,两个进程的虚拟地址可相同,内核态线程共享内核地址空间;用户态程序不能直接调用并操作内核代码或数据,只能通过系统调用接口向内核发出请求。由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络。CPU划分出两个权限等级:用户态和内核态。

 

1、内核态与用户态定义

在Linux中,内核态和用户态通常是由处理器管理的。处理器中设置了一个特殊的标志位,称为内核标志,当标志被置位时,处理器就处于内核态中,此时进程或线程可以执行特权操作;当标志被清除时,则处于用户态中,此时进程或线程可以执行非特权的受限操作。当一个进程或线程需要访问内核态资源时,它们必须发送系统调用请求到操作系统内核,并等待操作系统完成对应操作。在系统调用结束后,进程或线程返回用户态并继续执行。

通过将功能划分为内核态和用户态,计算机系统可以保证操作系统的安全性和稳定性。在内核态下,进程或线程具有较高的权限和能力,但也需要严格限制,以避免恶意代码或非法访问对系统造成破坏或威胁。

(1)用户态

用户态是指一个进程或线程执行在非特权模式下的状态,程序只能访问特定范围内受到限制的资源,如用户进程的内存或磁盘。在用户态下,程序员可以直接访问大多数系统资源和外围设备,但不能直接访问操作系统核心和硬件资源。

当CPU运行在用户态时,它只能进行一些受限的操作,比如对虚拟内存的读写、文件系统、网络接口以及其他应用程序服务的调用等。为了访问内核资源和执行特权操作,用户态的进程或线程需要向内核发出系统调用请求,通过操作系统提供的系统调用或库函数来完成,系统调用和库函数用于屏蔽底层硬件差异和操作系统实现细节,使应用程序能够更方便、安全地访问系统功能。对于普通用户而言,大多数应用程序都在用户态下运行。

(2)内核态

内核态是指CPU运行在特权模式下时进程或者线程所处的状态。在内核态下,进程或线程可以访问受到限制的资源和设备,直接访问操作系统内核空间,即所有资源,并可以执行一些特权操作,如读写硬件设备、管理进程和文件系统等等。在这种状态下,内核程序拥有比用户程序更高的权限和能力,进程也可以调用更底层的系统函数来完成需要的任务。

实际上,内核态就是一个高级管理员,它可以控制整个资源的权限,用户态就是一个业务,每个人都可以使用它。从用户态到内核态切换可以通过三种方式:

        (1)系统调用,其实系统调用本身就是中断,但是软件中断,跟硬中断不同。

        (2)异常:如果当前进程运行在用户态,如果这个时候发生了异常事件,就会触发切换。例如:缺页异常。

        (3)外设中断:当外设完成用户的请求时,会向CPU发送中断信号。

2、用户态与内核态的交互

在Linux系统中,用户态和内核态之间的交互是通过系统调用实现的。

用户态进程在运行时,若需要进行一些需要权限或资源管理的操作(例如读写磁盘、申请内存、创建进程等),就需要通过系统调用来向内核发出请求。用户态进程通过调用一个特定的函数(如read、write等)来发起系统调用请求,此时CPU会切换到内核态运行,操作系统会根据请求进行相应的处理,处理完成后再切换回用户态,把结果返回给对应的进程。

在系统调用中,用户态和内核态之间需要进行参数传递和数据交互,参数通常通过CPU寄存器或栈传递。为了保证安全性和稳定性,操作系统会对用户的请求进行检查和限制,只有在授权的情况下才会执行相应的操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值