如何进入内核态

本文详细介绍了进入内核态的多种方式,如中断和系统调用,强调了软中断中的系统调用过程。文章探讨了内核栈的结构和创建,指出thread_info结构体在内核栈中的重要角色。通过分析系统调用的执行流程,展示了如何从用户态进入内核态,并解释了研究这一问题的动机是为了在应用程序中实现自旋锁以避免线程切换。
摘要由CSDN通过智能技术生成

进入内核态的方式

中断,包括软中断和硬中断,其中软中断包括系统调用(int 80)和各种异常(segmentfatel 信号11),硬中断包括网卡收包,usb插入等等。

内核栈

  • 每个进程独有一个内核栈
  • 各cpu架构有不同的异常栈,中断栈,有的是使用的是被打断的程序的内核栈,有的有独有的空间
内核栈结构体
union thread_union {
	struct thread_info thread_info;
	unsigned long stack[THREAD_SIZE/sizeof(long)];
};

其中thread_info保存在进程的重要信息,最重要的是指针task,其中包含了进程的所有信息。
该结构体的大小就表示了整个内核栈的大小,即THREAD_SIZE,一般都是4k或者8k。所以thread_info保存在低地址,内核栈从该地址空间的尾部向内增长。

/*
 * low level task data that entry.S needs immediate access to.
 * __switch_to() assumes cpu_context follows immediately after cpu_domain.
 */
struct thread_info {
    unsigned long        flags;        /* low level flags */
    int            preempt_count;    /* 0 => preemptable, <0 => bug */
  
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值