- 博客(34)
- 资源 (5)
- 收藏
- 关注
原创 701. 二叉搜索树中的插入操作
链接:701. 二叉搜索树中的插入操作题解:/** * * Definition for a binary tree node. * * struct TreeNode { * * int val; * * TreeNode *left; * * TreeNode *right; * * TreeNode() : val(0), left(nullptr), right(nullptr) {} * ..
2020-09-30 23:53:21 2288
原创 进程的描述和进程的创建
进程控制块PCB——task_struct为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息。 struct task_struct数据结构很庞大 Linux进程的状态与操作系统原理中的描述的进程状态似乎有所不同,比如就绪状态和运行状态都是TASK_RUNNING,为什么呢? 进程的标示pid 所有进程链表struct list_head tasks; 内核的双向循环链表的实现方法 - 一个更简略的双向循环链表
2020-09-30 14:18:23 165
原创 进程的切换和系统的一般执行过程
进程的调度时机与进程的切换操作系统原理中介绍了大量进程调度算法,这些算法从实现的角度看仅仅是从运行队列中选择一个新进程,选择的过程中运用了不同的策略而已。对于理解操作系统的工作机制,反而是进程的调度时机与进程的切换机制更为关键。进程调度的时机 中断处理过程(包括时钟中断、I/O中断、系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule(); 内核线程可以直接调用schedule()进行进程切换,也可以在中断处理过程
2020-09-30 13:47:48 251
原创 哈工大-基于内核栈切换的进程切换
1. 课程说明难度系数:★★★★☆本实验是操作系统之进程与线程 - 网易云课堂的配套实验,推荐大家进行实验之前先学习相关课程:L10 用户级线程 L11 内核级线程 L12 核心级线程实现实例 L13 操作系统的那棵树Tips:点击上方文字中的超链接或者输入https://mooc.study.163.com/course/1000002008#/info进入理论课程的学习。 如果网易云上的课程无法查看,也可以看 Bilibili 上的操作系统哈尔滨工业大学李治军老师。...
2020-09-30 13:19:26 780
原创 Linux内核分析-孟宁
1.https://blog.csdn.net/fieldoffier/category_2922581.html2.https://blog.csdn.net/sunyeyi/category_2920883.html
2020-09-29 22:12:08 462
转载 《Linux内核分析》(二)——从一个简单Linux内核分析进程切换原理
转载:https://blog.csdn.net/FIELDOFFIER/article/details/44280717《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000”实验环境:c+Linux64位 (32位系统可能结果会不同)依照学术诚信条款,我保证此回答为本人原创,所有回答中引用的外部材料已经做了出处标记。源代码以及运行环境搭建请参考mykernel,其中提供了一个简单的Linux内核源代码,本文主要分析.
2020-09-29 18:54:34 245
转载 2020-09-29
用mykernel 2.0虚拟一个x86-64的CPU硬件平台转载:https://mp.weixin.qq.com/s/SzpN1BNty5aPDZhNdCO5yA一个操作系统那么复杂,它本质上是怎么工作的呢?接下来要做一个有趣的实验。“天下大事必作于细,天下难事必作于易”。首先搭建一个虚拟的平台,虚拟一个x86-64的CPU,然后使用Linux内核源代码把虚拟CPU初始化配置好时钟中断和程序入口,就可以开始编写自己的操作系统内核了。为了便于理解实验内容,这里简要介绍中断的基本概念。中断最
2020-09-29 17:07:09 189
原创 501.二叉搜索树中的众数
链接:https://leetcode-cn.com/problems/find-mode-in-binary-search-tree/题解:https://leetcode-cn.com/problems/find-mode-in-binary-search-tree/solution/er-cha-shu-zhong-xu-bian-li-de-liang-chong-fang-sh/ List<Integer> mList = new ArrayList<..
2020-09-27 22:44:38 85
原创 哈工大-系统调用
系统调用1. 课程说明本实验是操作系统之基础 - 网易云课堂的配套实验,推荐大家进行实验之前先学习相关课程:L4 操作系统接口 L5 系统调用的实现Tips:点击上方文字中的超链接或者输入https://mooc.study.163.com/course/1000002004#/info进入理论课程的学习。 如果网易云上的课程无法查看,也可以看 Bilibili 上的操作系统哈尔滨工业大学李治军老师。2. 实验目的建立对系统调用接口的深入认识; 掌握系统调用的基本过程...
2020-09-24 20:54:07 578
原创 哈工大-操作系统的引导
操作系统的引导1. 课程说明本实验是操作系统之基础 - 网易云课堂课程的配套实验,推荐大家进行实验之前先学习相关课程:L2 开始揭开钢琴的盖子 L3 操作系统启动Tips:点击上方文字中的超链接或者输入https://mooc.study.163.com/course/1000002004#/info进入理论课程的学习。 如果网易云上的课程无法查看,也可以看 Bilibili 上的操作系统哈尔滨工业大学李治军老师。2. 实验目的熟悉 hit-oslab 实验环境; 建...
2020-09-23 14:39:37 1816 1
原创 哈工大操作系统
实验指导:https://hoverwinter.gitbooks.io/hit-oslab-manual/content/index.html实验环境:https://github.com/NIGHTFIGHTING/hit-oslab,主要是为了安装gcc3.4如果报错安装:dev86.x86_64 : A real mode 80x86 assembler and linker,为了安装as86,ld86...
2020-09-22 19:55:02 1312
原创 226. 翻转二叉树
链接:https://leetcode-cn.com/problems/invert-binary-tree/题解:https://leetcode-cn.com/problems/invert-binary-tree/solution/shou-hua-tu-jie-san-chong-xie-fa-di-gui-liang-chon//** * * Definition for a binary tree node. * * struct TreeNode { * * ..
2020-09-16 23:37:49 84
转载 清华大学操作系统公开课笔记(向勇、陈渝)
转载:https://zhuanlan.zhihu.com/p/150510828第一章:概述内核功能:物理内存管理 | 虚拟内存管理 | 文件系统管理 | 中断处理和IO设备驱动 (底层硬件)内核特征并发(指一段时间内多个程序运行;而并行是指一个时间点上多个程序运行,要求多个CPU):计算机系统中同时存在多个运行的程序,需要OS管理和调度共享“同时”访问或互斥共享虚拟利用多道程序设计技术,让每一个用户都觉得有一个计算机专门为他服务异步程序的执行不是一步到底的,而是走走停...
2020-09-16 11:41:43 756
原创 37. 解数独
链接:https://leetcode-cn.com/problems/sudoku-solver/题解:1.把没有数字的位置,使用vector记录下来2.每个数字现在已经存在的行rows,列cols,对角线boxes都记录下来3.dfs每一个数字,到vector的size结束class Solution {private: bool line[9][9]; bool column[9][9]; bool block[3][3][9]; ...
2020-09-16 10:43:07 115
原创 637. 二叉树的层平均值
链接:https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/题解:https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/solution/er-cha-shu-de-ceng-ping-jun-zhi-by-leetcode-soluti//** * * Definition for a binary tree node. * ..
2020-09-12 22:23:30 103
原创 多线程模型
一、什么是线程1.在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”2.一切进程至少都有一个执行线二、进程与线程1.进程是资源竞争的基本单位2.线程是程序执行的最小单位3.线程共享进程数据,但也拥有自己的一部分数据 线程ID,一组寄存器,栈,errno,信号状态,优先级三、fork和创建新线程的区别1.当一个进程执行一个fork调用的时候,会创建出进程的一个新拷贝,新进程将拥有它自己的变量和它...
2020-09-12 12:27:01 354
原创 216. 组合总和 III
链接:https://leetcode-cn.com/problems/combination-sum-iii/题解:class Solution { public: vector<vector<int>> combinationSum3(int k, int n) { vector<int> path; vector<vector<int>> result; ..
2020-09-11 23:52:43 68
转载 brpc线程模型学习
转载:https://blog.csdn.net/okiwilldoit/article/details/82755526bthread是brpc使用的M:N线程库,目的是在提高程序的并发度的同时,降低编码难度,并在核数日益增多的CPU上提供更好的scalability和cache locality。”M:N“是指M个bthread会映射至N个pthread,一般M远大于N。由于linux当下的pthread实现(NPTL)是1:1的,M个bthread也相当于映射至N个LWP。bthread的
2020-09-09 22:06:44 772
转载 协程分析之 context 上下文切换
转载:https://juejin.im/entry/6844903448849154061协程现在已经不是个新东西了,很多语言都提供了原生支持,也有很多开源的库也提供了协程支持。最近为了要给tbox增加协程,特地研究了下各大开源协程库的实现,例如:libtask, libmill, boost, libco, libgo等等。他们都属于stackfull协程,每个协程有完整的私有堆栈,里面的核心就是上下文切换(context),而stackless的协程,比较出名的有protothreads,
2020-09-08 20:42:45 1032
转载 多核环境下pthread调度执行bthread的过程
调度执行bthread的主要数据结构一个pthread调度执行私有TaskGroup的任务队列中各个bthread的过程调度执行bthread的主要数据结构在一个线上环境系统中,会产生大量的bthread,系统的cpu核数有限,如何让大量的bthread在有限的cpu核心上得到充分调度执行,实现全局的最大并发主要是由TaskGroup对象、TaskControl对象实现的。每一个TaskGroup对象是系统线程pthread的线程私有对象,它内部包含有任务队列,并控制pthread如何执行任务队
2020-09-08 14:12:22 1480
转载 ucontext-人人都可以实现的简单协程库
1.干货写在前面协程是一种用户态的轻量级线程。本篇主要研究协程的C/C++的实现。首先我们可以看看有哪些语言已经具备协程语义:比较重量级的有C#、erlang、golang* 轻量级有python、lua、javascript、ruby 还有函数式的scala、scheme等。c/c++不直接支持协程语义,但有不少开源的协程库,如:Protothreads:一个“蝇量级” C 语言协程库libco:来自腾讯的开源协程库libco介绍,官网coroutine:云风的一个C语言同步协程库,
2020-09-08 12:28:35 568
转载 bthead基础
线程执行协程与线程调用函数的不同协程的原理与实现方式系统线程执行多个协程时的内存布局变化过程brpc的bthread任务定义线程执行协程与线程调用函数的不同一个pthread系统线程执行一个函数时,需要在pthread的线程栈上为函数创建栈帧,函数的形式参数和局部变量都分配在栈帧内。函数执行完毕后,按逆序销毁函数局部变量,再销毁栈帧。假设有一个线程A开始执行下面的foo函数:void bar(int m) { // 执行点1 // ...}void foo(int a, int b
2020-09-08 10:44:02 367
原创 107. 二叉树的层次遍历 II
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/题解:/** * * Definition for a binary tree node. * * struct TreeNode { * * int val; * * TreeNode *left; * * TreeNode *right; * * TreeN..
2020-09-07 14:29:53 79
原创 brpc学习:bvar
一.介绍https://www.bookstack.cn/read/brpc-0.9.7-zh/a070abbea9bcb45d.mdbvar是多线程环境下的计数器类库,方便记录和查看用户程序中的各类数值,它利用了thread local存储减少了cache bouncing,相比UbMonitor(百度内的老计数器库)几乎不会给程序增加性能开销,也快于竞争频繁的原子操作。brpc集成了bvar,http接口下的/vars可查看所有曝光的bvar,/vars/VARNAME可查阅某个bvar,在
2020-09-05 22:24:38 620
原创 brpc搭建、编译和使用
前面介绍了brpc的理解,这里给出brpc官方的搭建过程,以及提供的测试用例,对brpc的使用有一个宏观的理解。PS:这里必须再次称赞百度工程师门,brpc开源的文档非常的丰富,仅仅是看文档都受益匪浅,同时提供了各个系统,各个版本的安装编译过程,安装编译文档可以通过以下链接直接查看:https://github.com/brpc/brpc/blob/master/docs/cn/getting_started.md这里给出本人成功安装编译的过程,供大家参考。前期准备:brpc需要依赖三个开源库
2020-09-04 20:31:08 3525 2
原创 51. N 皇后
链接:51. N 皇后题解:这个问题很经典了,简单解释一下:给你一个 N×N 的棋盘,让你放置 N 个皇后,使得它们不能互相攻击。PS:皇后可以攻击同一行、同一列、左上左下右上右下四个方向的任意单位。这个问题本质上跟全排列问题差不多,决策树的每一层表示棋盘上的每一行;每个节点可以做出的选择是,在该行的任意一列放置一个皇后。函数 backtrack 依然像个在决策树上游走的指针,通过 row 和 col 就可以表示函数遍历到的位置,通过 isValid 函数可以将不符合条件的情况剪...
2020-09-03 23:21:28 76
原创 841. 钥匙和房间
链接:841. 钥匙和房间题解:class Solution { public: bool canVisitAllRooms(vector<vector<int>>& rooms) { int path_count = 0; int begin = 0; vector<bool> visited(rooms.size(), false); dfs(rooms,...
2020-09-01 09:21:41 96
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人