![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
linux内功
文章平均质量分 69
内核
_李白_
内外兼修,方是正途;外是架构,内是数学。
展开
-
Linux内核:系统调用大全(持续更新中)
1. sys_brk()是用于更改进程的堆空间大小。2. dup2用于创建一个新的文件描述符,这个新的文件描述符与指定的旧文件描述符指向同一个文件.原创 2023-08-01 12:43:03 · 569 阅读 · 0 评论 -
Linux内核源码分析-进程调度(六)-PELT(per-entity load tracking)
什么叫负载?per-entity load tracking如何记录负载信息runnable_avg_yN_invdecay_loadstruct sched_avg调度实体se初始化函数是init_entity_runnable_average计算当前负载贡献计算公式代码实现accumulate_sumdecay_load__accumulate_pelt_segments调度实体更新负载贡献就绪队列更新负载贡献per-entity load tracking有什么好处呢?原创 2023-06-09 00:20:25 · 1883 阅读 · 2 评论 -
Linux内核源码分析-进程调度(五)-组调度
系统启动后默认有一个root_task_group,管理系统中最顶层CFS就绪队列cfs_rq(即cpu rq对应的CFS就绪队列)。cfs组进程调度:pick_next_task_fair; 组进程抢占:task_tick_fair调度组的时间分配原创 2023-05-24 20:58:05 · 4842 阅读 · 7 评论 -
Linux内核源码分析-进程调度(四)-进程周期性调度和如何选择下一个运行进程
周期性调度是指Linux周期性地检查当前任务是否耗尽当前进程的时间片,并检查是否应该抢占当前进程。判断一下curr比起红黑树最左边的是否已经运行满一个时间片(这个时间片是指curr进程自身在一个调度周期内可以运行的时间片),满了就回就绪队列等待下一次运行,这样每一个进程都会尽快运行,且权重小的进程更容易被抢占。 if (delta > ideal_runtime)resched_curr(rq_of(cfs_rq)); // 设置抢占flag原创 2023-05-16 23:59:03 · 738 阅读 · 4 评论 -
Linux内核源码分析-进程调度(三)-从进程创建到唤醒的过程去了解CFS调度器
从进程创建到唤醒的过程去了解CFS调度器原创 2023-05-09 23:26:15 · 1145 阅读 · 1 评论 -
Linux内核源码分析-进程调度(二)-常用数据结构
但是,每一个调度类并不是直接管理task_struct,管理的是调度实体,从而引入调度实体的概念。CFS调度器的就绪队列,简称cfs就绪队列,管理就绪态的struct sched_entity调度实体,后续可以通过pick_next_task接口从cfs就绪队列中选择最适合运行的调度实体(虚拟时间最小的调度实体)。// 每个CPU都有一个全局的运行队列,它是per-cpu类型,即每个cpu上都会有一个struct rq结构体。rq中包含cfs就绪队列、rt就绪队列、dl就绪队列。原创 2023-04-26 01:11:57 · 1170 阅读 · 0 评论 -
Linux内核源码分析-进程调度(一)-调度器初识
调度器的主要工作就是选择就绪的进程来执行。目前Linux支持的调度器有五种:stop scheduler、Deadline scheduler、RT scheduler、CFS scheduler、Idle scheduler。从Linux2.6.23开始,Linux引入scheduling class的概念,目的是为了将调度器模块化。这样提高了扩展性,添加一个新的调度器也变得简单起来。调度器的抽象基类为struct sched_class;原创 2023-04-23 08:34:28 · 1610 阅读 · 0 评论 -
Linux内核源码目录简介
【代码】Linux内核源码目录简介。原创 2023-01-31 21:13:51 · 320 阅读 · 0 评论 -
linux信号:SIGINT、SIGKILL、SIGSTOP、SIGCONT
linux信号:SIGINT、SIGKILL、SIGSTOP、SIGCONT原创 2022-12-13 00:46:19 · 6270 阅读 · 0 评论 -
linux源码分析之list的实现
linux内核中list的实现原创 2022-09-11 01:20:15 · 646 阅读 · 0 评论 -
linux:cc与gcc
我们在makefile中总是能看到cc和gcc,其实两者从本质来讲是两个完全不一样的东西,cc是unix系统下的概念(ccompiler),而gcc是linux下的概念(GNUcompilercollection)。但是我们在linux系统中的makefile中能看到大量使用cc,是因为linux为了兼容unix,unix下开发的项目可以直接在linux下进行编译链接,所以使用了软链接,cc->gcc。...原创 2022-07-17 22:31:16 · 548 阅读 · 0 评论 -
linux:硬链接和软链接
linux硬链接和软链接原创 2022-06-16 00:14:01 · 9093 阅读 · 0 评论 -
linux下线程的同步:互斥锁、自旋锁、读写锁、原子操作(进程也可用原子操作)
1、多线程中的i++问题我们来看一个经典的多线程i++出现的问题/*================================================================* Copyright (C) 2021 baichao All rights reserved.* * 文件名称:iaddadd.cpp* 创 建 者:baichao* 创建日期:2021年04月01日* 描 述:*====================.原创 2021-04-05 22:31:22 · 761 阅读 · 0 评论 -
linux五种io模型:阻塞IO、非阻塞IO、多路复用IO、异步IO、信号驱动IO
1、阻塞IO(blocking IO)在linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程如下:当用户调用了read这个系统调用,kernel就开始了IO的第一个阶段:准备数据。对于network io来说,很多时候数据在一开始还没有达到(比如,还没有收到一个完整的数据包),这个时候kernel就要等待足够的数据到来。而在用户进程这边,整个进程会被阻塞。当kernel一直等到数据准备好了,它就会将数据从kernel中拷贝到用户内存,然后kernel返回结果,用户原创 2021-02-23 22:44:14 · 643 阅读 · 0 评论 -
I/O多路复用之select、poll、epoll实例
1、select/* Access macros for `fd_set'. */#define FD_SET(fd, fdsetp) __FD_SET (fd, fdsetp)#define FD_CLR(fd, fdsetp) __FD_CLR (fd, fdsetp)#define FD_ISSET(fd, fdsetp) __FD_ISSET (fd, fdsetp)#define FD_ZERO(fdsetp) __FD_ZERO (fds原创 2021-02-22 18:01:28 · 7561 阅读 · 3 评论 -
linux信号:signal和sigaction
/* Set the handler for the signal SIG to HANDLER, returning the old handler, or SIG_ERR on error. By default `signal' has the BSD semantic. */__BEGIN_NAMESPACE_STD#ifdef __USE_MISCextern __sighandler_t signal (int __sig, __sighandler_t __handler.原创 2021-02-16 23:21:17 · 1795 阅读 · 0 评论