首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    操作系统(1) - nio机制

    p=2 NIO 通过对连接的不同阶段添加状态位 , 将连接的处理进行分解,并允许同一线程断点接续处理,避免每个连接都需要新线程去处理, 多连接的情况下,线程切换成本较高 问题 : 每个文件描述符被访问的时候...,线程需要能够切换,回来还能继续执行; 方案 : 通过添加并维护客户端连接 (文件描述符) 的状态位 ,使同一线程在处理不同连接时,能够根据上次切换前的处理进度继续处理; 状态位 服务端接收客户端连接事件...最终方案 : 不同的连接(文件描述符) 数据通过网卡到达之后,会将数据缓存到网卡的内存中,同时产生一个内核硬中断,内核线程会产生一个中断事件,通过中断事件将这个文件描述符放到[epoll存储区域] 那么...当我们执行epoll_ctl时,除了把socket放到epoll文件系统里file对象对应的红黑树上之外,还会给内核中断处理程序注册一个回调函数,告诉内核,如果这个句柄的中断到了,就把它放到准备就绪list...作者:舒小贱 链接:https://www.jianshu.com/p/4d8568c0ef0c selector 两种工作方式 // selector 是非阻塞的,可以看成是子线程在select一直在收集变化的文件描述符

    55020

    从零开始学习UCOSII操作系统13–系统移植理论篇「建议收藏」

    2.2、处理器支持中断,并能产生定时中断 2.3、用C语言就可以开关中断 原因:连中断都没有的话,是不可能进行任务切换的。...} (2)OSTaskCreateHook(): 每当添加任务的时候,OS_TCBInit()函数都会调用OSTaskCreateHook()函数,该函数允许扩展UCOSII的功能,当UCOSII设置完任务控制块...OS_TCB初始化的绝大部分的工作后,但是在任务控制块被链接到相应的任务链中之前,以及在该任务就绪运行之前,UCOSII会调用OSTaskCreateHook(),该函数被调用的时候中断是打开的。...} (2)OSCtxSw(): 任务级的切换是通过执行软中断指令,或者依据处理器的不同,执行TPAP陷阱指令执行的。.../调整堆栈指针 OSintExit(); OSINTCtxSw(); } 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/136016.html原文链接

    90120

    嵌入式实时操作系统UCOSII

    A—>B—>A 任务A入栈 任务B把内容从栈中弹出(出栈) CPU切换到任务B 任务B入栈 任务A出栈 CPU切换到任务A UCOS操作系统的任务中断 上了操作系统后,中断的写法跟以前裸机基本没有变化。...因为出中断前会执行“OSIntExit()”,执行这个API函数会产生一次系统调度,一旦发生了任务切换,CPU就不会回到断点处。...UCOSII源码链接:www.micrium.com/downloadcenter/ 选择对应的处理器 UCOSII文件说明 核心文件: 创建工程 1)新建一个空白文件夹.../UCOSII/PORT”) 11)新建文件并添加到工程中 系统滴答定时器初始化 //函数功能:系统滴答中断 //参数说明:待延时的毫秒 //返回值:无 //注意事项: //时间:2019.6 void...任务函数: void Start_Task(void *pdata); 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/136141.html原文链接:https:/

    5.7K31

    性能测试必备知识(6)- 如何查看“CPU 上下文切换”

    做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html 课前准备,安装 sysbench 下载 sysbench.../configure --without-mysql make && make install 百度云链接 链接:https://pan.baidu.com/s/1a9qR9GNzEbj1rkDp2wXfIw...结果分析 现在的上下文切换次数 cs 是 200-300左右,而中断次数 in 是 200 左右,r 和 b 都是 0。...结果分析 sysbench 的多个线程的上下文切换次数有非常多,终于找到罪魁祸首了 分析为什么中断次数也颇高 前面也说到 in 值达到了 8w,那是什么导致中断次数如此之高呢,接下来瞧一瞧 首先 中断处理...中断次数变多了,说明 CPU 被中断处理程序占用,还需要通过 文件来分析具体的中断类型 /pro/interrupts 全文总结-如何查看分析上下文切换 通过 vmstat 确认系统的当前的上下文切换

    3K10

    分析Linux系统的执行过程

    十、分析switch_to中的汇编代码,理解进程上下文的切换机制,以及与中断上下文切换的关系 总结 原创作品转载请注明出处 + https://github.com/mengning/linuxkernel...() -> copy_process() -> copy_thread() -> ret_from_fork() 三、使用gdb跟踪分析一个fork系统调用内核处理函数do_fork 在上一次的基础上添加一个...十、分析switch_to中的汇编代码,理解进程上下文的切换机制,以及与中断上下文切换的关系 函数的调用关系: schedule() --> context_switch() --> switch_to...对于进程切换的时机,中断处理以后是其中一个时机,内核线程也可以进程schedule函数的调用,来完成进程的切换。对于schedule函数。...大致的过程是: 首先,进程x在执行,假设执行的ip是 ip_prev.进入中断处理,以及进程切换的时机以后,先保持自己的内核栈信息,包括 flags 以及 ebp,自己的 ip 会保存在 thread

    1.3K20

    进程的用户态和内核态的概念理解以及切换方法_用户进程从用户态切换到内核态

    原文链接:https://www.cnblogs.com/viviwind/archive/2012/09/22/2698450.html 内核态: 当一个任务(进程)执行系统调用而陷入内核代码中执行时...3.外围设备的中断 当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换...比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。...具体的切换操作 从触发方式上看,可以认为存在前述3种不同的类型,但是从最终实际完成由用户态到内核态的切换操作上来说,涉及的关键步骤是完全一致的,没有任何区别,都相当于执行了一个中断响应的过程,因为系统调用实际上最终是中断机制实现的...发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/193168.html原文链接:https://javaforall.cn

    1.7K20

    嵌入式裸板开发之中断与异常(一)

    除了USR模式外,其他模式之间都可以随意切换,被称为特权模式,可以直接操作CPSR寄存器进入其他模式。 ?   ...(6)进入异常处理    a.相应链接寄存器(LR寄存器)保存下条指令的地址。如果在ARM 状态进入异常,下条指令的地址将会复制到链接寄存器(当前PC+4 或PC+8,由异常决定。...通常也会置位中断禁止标志位,以防止不同的难处理的异常嵌套。如果一个异常发生时处理器处于Thumb 状态,当装载异常向量地址到PC 时会自动切换到ARM 状态。    ...将链接寄存器(LR寄存器)适当减去一个偏移量并放入到PC 中。(偏移量由异常类型决定)    b. 复制SPSR 的内容返回给CPSR 中。    c....注意:不需要在异常结束时切换回Thumb 状态,因为在异常前会立刻保存CPSR 中T 位的值到SPSR 中,并在退出异常时从SPSR 恢复到CPSR 中。 ?

    88120

    操作系统-进程(1)进程与进程调度「建议收藏」

    (2)链接方式:队列中的进程可以通过PCB中的队列指引元采用单向链接或双向链接,系统为每个队列设置队列标志以标志和识别队列。...进程切换指从正在运行的进程中收回处理器,让待运行进程来占有处理器运行,实质上就是被中断运行进程与待运行进程的上下文切换,处理过程是: 保存被中断进程的上下文 转向进程调度 恢复待运行进程的上下文...终止用系统调用、不能继续执行的异常导致被中断进程进入终止态 进程切换必须在操作系统内核模式下完成,这就需要模式切换(处理器状态切换),模式切换包括: (1)用户模式到内核模式,由中断/异常/系统调用中断用户进程执行而触发...(2)处理器模式转为用户模式 综上,完整的进程切换过程为 (中断/异常等触发)正向模式切换并压入PSW/PC 保存被中断进程的现场信息 处理具体中断/异常 把被中断进程的系统堆栈指针...不会引起进程切换,只是在处理完成后把控制权交回给被中断进程,处理流程为 中断/异常触发正向模式切换压入PSW/PC 保存被中断进程的现场信息 处理中断/异常 恢复被中断进程的现场信息

    91720

    OpenHarmony 内核源码分析(中断切换篇) | 系统因中断活力四射

    .一般二种场景下需要切换任务上下文:在中断环境下,从当前线程切换到目标线程,这种方式也称为硬切换.它们通常由硬件产生或是软件发生异常时的被动式切换.哪些情况下会出现硬切换呢?...,硬切换硬在需切换工作模式(中断模式).所以会比线程环境下的切换更复杂点,但道理还是一样要保存和恢复切换现场寄存器的值, 而保存寄存器顺序格式结构体叫:任务中断上下文(TaskIrqContext).在线程环境下...而保存寄存器顺序格式结构体叫:任务上下文(TaskContext).本篇说清楚在中断环境下切换(硬切换)的实现过程.ARM的七种工作模式中,有两个是和中断相关.普通中断模式(irq):一般中断模式也叫普通中断模式...R4, SP@R4=SP EXC_SP_SET __svc_stack_top, OS_EXC_SVC_STACK_SIZE, R1, R2 @切换到svc栈#endif/*BLX 带链接和状态切换的跳转.../*BLX 带链接和状态切换的跳转*/ BLX HalIrqHandler /* 调用硬中断处理程序,无参 ,说明HalIrqHandler在svc栈中执行 */#ifdef LOSCFG_IRQ_USE_STANDALONE_STACK

    25310

    rust写操作系统 rCore tutorial 学习笔记:实验指导四 进程与线程

    对 CPU 进行抽象在上面完成对线程的调度 lab4 的代码将会在 lab3 完成的代码上面继续进行改动; 线程和进程 程序(Program):从源代码经过编译器一系列处理(编译、链接、优化等)得到的可执行文件...),就可以切换到第一个线程了。...::set_sie(); } // 设置下一次时钟中断 set_next_timeout(); } 线程的切换 当发生中断时,在 __restore 时,a0 寄存器的值是 handle_interrupt...从这个原理出发,我们就可以完成线程的切换工作 修改中断处理 在线程切换时(即时钟中断时),handle_interrupt 函数需要将上一个线程的 Context 保存起来,然后将下一个线程的 Context...# 因为线程当前的栈不一定可用,必须切换到内核栈来保存 Context 并进行中断流程 # 因此,我们使用 sscratch 寄存器保存内核栈地址 # 思考:sscratch

    57820

    UCOSII系统移植详解「建议收藏」

    2,处理器CPU支持中断,并能产生定时中断 3,用C语言就可以开关中断,进行任务切换 4,处理器CPU能够支持一定数量的数据存储硬件堆栈,也就是栈 5,处理器有将堆栈指针以及其他的CPU的寄存器的内容读出...stack pointer = OSTcbHighRdy->OSTCBStkPtr; //从新的堆栈中恢复处理器的所有的寄存器,就是把刚刚切换的堆栈保存到别的地方当中 //执行中断返回,...} (2)OSCtxSw(); 任务级的切换是通过执行软中断指令,或者依据处理器的不同,执行TPAP陷阱指令执行的。...OS_TCB初始化的绝大部分的工作后,但是在任务控制块被链接到相应的任务链中之前,以及在该任务就绪运行之前,UCOSII会调用OSTaskCreateHook(),该函数被调用的时候中断是打开的。...3,OS_CPU_A.s:实现核心的任务切换需要的基本的函数 SRCPND EQU 0x4a000000 ; 源中断的寄存器 INTPND EQU 0x4a000010

    2.7K12

    Linux面试专题

    在2.4和更早的内核中,仅仅用户模式的进程可以被上下文切换出局,由其他进程抢占。...(4)消息(Message)队列:消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。...16) 模块程序能否使用可链接的库函数? 模块程序运行在内核空间,不能链接库函数。 17) TLB 中缓存的是什么内容?...1.软中断一般是“可延迟函数”的总称,它不能睡眠,不能阻塞,它处于中断上下文,不能进城切换,软中断不能被自己打断,只能被硬件中断打断(上半部),可以并发的运行在多个CPU上。...所以软中断必须设计成可重入的函数,因此也需要自旋锁来保护其数据结构。 2.工作队列中的函数处在进程上下文中,它可以睡眠,也能被阻塞,能够在不同的进程间切换。已完成不同的工作。

    26710
    领券