操作系统
文章平均质量分 89
夜光小兔纸
每天进步一点点
展开
-
SecureCRT出现乱码的解决方法
SecureCRT是一个商业终端连接工具,它支持多种自定义设置。默认设置下,通过SecureCRT连接SSH服务器可能出现中文乱码的情况。这是由于SecureCRT字符编码与服务器的字符编码不一致造成的。当然解决这个问题也很简单,将SecureCRT字符编码设置成与服务器的字符编码一致即可,本文会介绍具体操作,希望对你有所帮助。原创 2024-03-13 19:15:19 · 8742 阅读 · 2 评论 -
Linux内核版本介绍与查询
响应中断,执行中断服务程序管理多个进程,调度和分享处理器的时间管理进程地址空间的内存管理网络和进程间通信等系统服务程序运行于用户空间,执行用户进程运行于内核空间,处于进程上下文,代表某个特定进程的执行运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断。转载 2023-12-08 15:32:23 · 1818 阅读 · 0 评论 -
su: failed to execute /bin/bash: Resource temporarily unavailable
Linux 从root用户切换为普通用户时报错su: failed to execute /bin/bash: Resource temporarily unavailable或bash:fork:Resource temporarily unavailable原创 2023-06-29 19:52:45 · 4553 阅读 · 0 评论 -
操作系统 OS 与内核 Kernel 的区别
通用底盘技术Canoo公司有一项核心技术专利,这就是它们的通用电动底盘技术,长得是这个样子,非常像一个滑板:这个带轮子、有电池、能动的滑板已经包含了一辆车最核心的组件,差的就是一个外壳。这个看起来像滑板的东西就是所谓的电池系统和底盘一体化技术,Canoo公司在它们的通用底盘上加装不同的外壳就能制造出不同的车型。什么是内核?在上面这个示例中,包含轮子以及电池系统的底盘就好比内核,而套上外壳加上椅子以及内饰后的整体成品就好比操作系统。内核仅仅是操作系统的一部分,是真正与硬件交互的那部分软件,与硬转载 2021-10-09 16:15:33 · 711 阅读 · 0 评论 -
可怕!CPU竟成了黑客的帮凶!
本故事根据CPU真实漏洞改编前情回顾还记得我吗,我是阿Q,就是那个CPU一号车间的阿Q啊。如果你忘记了我,记得看看这里回忆一下哦:完了!CPU一味求快出事儿了! 自从我们车间用上了 乱序执行 和 分支预测 后,生产效率那是大大提升,领导不仅在全厂的员工大会表扬了我们,还把这两项技术向全厂推广,在我们8个CPU核心车间都铺开了,性能甩开竞争对手CPU几条街。 可是,就在我们还沉醉在取得的成绩时,不知不觉我们竟埋下了灾难的种子······事情还得从不久前的一个晚上说.转载 2021-03-27 00:04:03 · 158 阅读 · 0 评论 -
CPU有个禁区,内核权限也无法进入!
神秘项目我是CPU一号车间的阿Q,是的,我又来了。最近一段时间,我几次下班约隔壁二号车间虎子,他都推脱没有时间,不过也没看见他在忙个啥。前几天,我又去找他,还是没看到他人,却意外地在他桌上发现了一份文件,打开一看是一个代号为SGX的神秘项目,还是厂里领导亲自带头攻坚。仔细看了看,原来,自从上次的攻击事件(详情:完了!CPU一味求快出事儿了!)发生以来,领导一直忧心忡忡,虽然当时依靠操作系统提供的办法暂解了燃眉之急,不过治标不治本,我们自身的缺陷一直存在,保不准哪天还要翻车。这个代号为SGX的神秘转载 2021-03-27 11:26:22 · 252 阅读 · 0 评论 -
完了!CPU一味求快出事儿了!
自我介绍我叫阿Q,是CPU一号车间里的员工,我所在的这个CPU足足有8个核,就有8个车间,干起活来杠杠滴。我所在的一号车间里,除了负责执行指令的我,还有负责取指令的小A,负责分析指令的小胖和负责结果回写的老K。CPU的每个车间都有一堆箱子,人们把这些箱子叫做寄存器,我所在的一号车间也不例外,我们每天的工作就是不断执行指令,然后折腾这些箱子,往里面存东西取东西。由于我们四个人的出色工作,一号车间业绩突出,在年会上还多次获得了最佳CPU核心奖呢。 缓存我们每天都需要跟内存打交道,不过由转载 2021-03-26 22:12:28 · 200 阅读 · 0 评论 -
终于明白了,一文彻底理解I/O多路复用
本篇是高性能、高并发系列的第三篇,承接上文《读取文件时,程序经历了什么?》,在讲解了进程、线程以及I/O后,我们来到了高并发中又一关键技术,即I/O多路复用。在讲解该技术之前,我们需要预习一下文件以及文件描述符。 什么是文件程序员使用I/O最终都逃不过文件这个概念。在Linux世界中文件是一个很简单的概念,作为程序员我们只需要将其理解为一个N byte的序列就可以了:b1, b2, b3, b4, … bN实际上所有的I/O设备都被抽象为了文件这个概念,一切皆文件,Everythin转载 2021-03-24 23:10:06 · 536 阅读 · 0 评论 -
读取文件时,程序经历了什么?
承接上文《一文彻底理解高性能高并发中的线程与线程池》,这是高性能、高并发系列的第二篇文章,在这里我们来到了I/O这一话题。你有没有想过当我们执行I/O操作时计算机底层都发生了些什么?在回答这个问题之前,我们先来看下为什么对于计算机来说I/O是极其重要的。不能执行I/O的计算机是什么?相信对于程序员来说I/O操作是最为熟悉不过的了:当我们使用C语言中的printf、C++中的"<<",Python中的print,Java中的System.out.println等时,这是I/O;当我们转载 2021-03-24 22:36:04 · 220 阅读 · 0 评论 -
一文彻底理解高性能高并发中的线程与线程池
从这篇开始将会开启高性能、高并发系列,本篇是该系列的开篇,主要关注多线程以及线程池。一切要从CPU说起你可能会有疑问,讲多线程为什么要从CPU说起呢?原因很简单,在这里没有那些时髦的概念,你可以更加清晰的看清问题的本质。CPU并不知道线程、进程之类的概念。CPU只知道两件事:从内存中取出指令执行指令,然后回到1你看,在这里CPU确实是不知道什么进程、线程之类的概念。接下来的问题就是CPU从哪里取出指令呢?答案是来自一个被称为Program Counter(简称PC)的寄存器,也转载 2021-03-24 22:22:27 · 516 阅读 · 1 评论 -
大厂面试爱问的「调度算法」,20 张图一举拿下
前言最近,我偷偷潜伏在各大技术群,因为秋招在即,看到不少小伙伴分享的大厂面经。然后发现,操作系统的知识点考察还是比较多的,大厂就是大厂就爱问基础知识。其中,关于操作系统的「调度算法」考察也算比较频繁。所以,我这边总结了操作系统的三大调度机制,分别是「进程调度/页面置换/磁盘调度算法」,供大家复习,希望大家在秋招能斩获自己心意的 offer。正文进程调度算法进程调度算法也称 CPU 调度算法,毕竟进程是由 CPU 调度的。当 CPU 空闲时,操作系统就选择内存中的某个「就绪状态」的进程,并给转载 2021-03-23 22:39:41 · 197 阅读 · 0 评论 -
进程、线程基础知识全家桶,30 张图一套带走
前言先来看看一则小故事我们写好的一行行代码,为了让其工作起来,我们还得把它送进城(进程)里,那既然进了城里,那肯定不能胡作非为了。城里人有城里人的规矩,城中有个专门管辖你们的城管(操作系统),人家让你休息就休息,让你工作就工作,毕竟摊位不多,每个人都要占这个摊位来工作,城里要工作的人多着去了。所以城管为了公平起见,它使用一种策略(调度)方式,给每个人一个固定的工作时间(时间片),时间到了就会通知你去休息而换另外一个人上场工作。另外,在休息时候你也不能偷懒,要记住工作到哪了,不然下次到你工作了,转载 2021-03-23 21:59:31 · 221 阅读 · 0 评论 -
我是一个线程
第一回 初生牛犊我是一个线程,我一出生就被编了个号:0x3704,然后被领到一个昏暗的屋子里,在这里我发现了很多和我一模一样的同伴。我身边的同伴0x6900 待的时间比较长,他带着沧桑的口气对我说:“我们线程的宿命就是处理包裹。把包裹处理完以后还得马上回到这里,否则可能永远回不来了。”我一脸懵懂,“包裹,什么包裹?”“不要着急,马上你就会明白了,我们这里是不养闲人的。”果然,没多久,屋子的门开了, 一个面貌凶恶的家伙吼道:“0x3704 ,出来!”我一出来就被塞了一个沉甸甸的包裹,上面还附带着一转载 2021-03-22 22:22:33 · 113 阅读 · 0 评论 -
CPU:网卡老哥,你到底怎么工作的?
阿Q造访我是一个网卡,居住在一个机箱内的主板上,负责整台计算机的网络通信,要是没有我,这里就成了一个信息孤岛了,那也太无聊了~上个周末,服务器断电维护了,这是我难得的休息时间,我准备打个盹儿眯一会儿。这才刚合上眼,CPU一号车间的阿Q跑过来串门了。“怎么是你小子,听说你背后说了我很多坏话啊!今天怎么想起找我来了”“网卡老哥,你这都听谁造的谣,我想来拜访你很久了,这不平时工作太忙抽不开身,今天停电了一有空就找你来了嘛!”,阿Q笑着说到。“你可是大忙人,无事不登三宝殿,说吧,找我什么事儿”阿Q露转载 2021-03-22 21:59:25 · 135 阅读 · 0 评论 -
20 张图揭开「内存管理」的迷雾,瞬间豁然开朗
前言之前有不少读者跟我反馈,能不能写图解操作系统?既然那么多读者想看,我最近就在疯狂的复习操作系统的知识。操作系统确实是比较难啃的一门课,至少我认为比计算机网络难太多了,但它的重要性就不用我多说了。学操作系统的时候,主要痛苦的地方,有太多的抽象难以理解的词语或概念,非常容易被劝退。即使怀着满腔热血的心情开始学操作系统,不过 3 分钟睡意就突然袭来。。。该啃的还是得啃的,该图解的还是得图解的,万众期待的「图解操作系统」的系列来了。本篇跟大家说说内存管理,内存管理还是比较重要的一个环节,理解了..转载 2021-03-18 22:13:22 · 116 阅读 · 0 评论 -
原来 8 张图,就可以搞懂「零拷贝」了
前言磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的磁盘高速缓存区,可以有效的减少磁盘的访问次数。这次,我们就以「文件传输」作为切入点,来分析 I/O 工作方式,以及如何优化传输文件的性能。正文为什么要有 DMA 技术?在没有 DMA 技术前,I/O 的过程是这样的:CPU 发出对应的指令给磁盘控制器,然后返回;磁盘控制器收到..转载 2021-03-17 21:27:13 · 110 阅读 · 0 评论 -
CPU 空闲时在干嘛?
人空闲时会发呆会无聊,计算机呢?假设你正在用计算机浏览网页,当网页加载完成后你开始阅读,此时你没有移动鼠标,没有敲击键盘,也没有网络通信,那么你的计算机此时在干嘛?有的同学可能会觉得这个问题很简单,但实际上,这个问题涉及从硬件到软件、从 CPU 到操作系统等一系列环节,理解了这个问题你就能明白操作系统是如何工作的了。你的计算机 CPU 使用率是多少?如果此时你正在计算机旁,并且安装有 Windows 或者 Linux ,你可以立刻看到自己的计算机 CPU 使用率是多少。这是博主的一台安装有 Win转载 2021-03-16 18:38:11 · 140 阅读 · 0 评论 -
内核地址空间大冒险4:线程切换
sleep系统调用我是一个线程,生活在Linux帝国。一直以来辛勤工作,日子过得平平淡淡,可今天早上发生了一件事让我回想起来都后怕。早上,我还是如往常一样执行着人类编写的代码指令,不多时走到了一个冷门的分支,一个sleep()函数调用摆在了我的面前。终于可以去休息了!听老一辈的线程们说,执行了这个函数就可以休息休息了。我瞄了一眼参数,足足有5秒钟的休息时间,我简直乐坏了,没有犹豫,赶紧执行了这个调用。进入sleep()函数后,又来到了nano_sleep()函数,接着看到了一个syscall系统调转载 2021-03-15 22:07:37 · 207 阅读 · 0 评论 -
内核地址空间大冒险3:权限管理
前情回顾: 我通过open这个系统调用虫洞来到了内核空间,又在老爷爷的指点下来到了sys_open的地盘,即将开始打开文件的工作。 详情参见:内核地址空间大冒险:系统调用open系统调用链我是一个线程,出生在这个Linux帝国。在老爷爷的指点下,通过系统调用表来到了这个叫sys_open的地方。这里很简陋,简单比划了几下就直接来到了do_sys_open的地盘。一个负责接待的美女给我简单办理了手续,就让我去里面一个do_filp_open的房间。进去之后,这个..转载 2021-03-14 11:28:21 · 116 阅读 · 0 评论 -
内核地址空间大冒险2:中断与异常
前情回顾: 通过系统调用进入内核空间的这个虫洞我终于弄清楚了,可我的冒险还要继续······ 详情参见:内核地址空间大冒险:系统调用除0错误我是一个线程,出生在Linux帝国,今天我的任务是去执行一段人类用C语言编写的代码。开始的工作很顺利,一共执行了18次系统调用,对于来往于用户空间与内核空间的那个虫洞我已经轻车熟路,再也不是萌新一枚。后来,我拿到了一段数学运算的代码,来来往往地奔波于内存与寄存器之间,把我累得够呛,热的满头大汗,电脑风扇都转的飞快给我降温。..转载 2021-03-14 11:11:57 · 227 阅读 · 0 评论 -
内核地址空间大冒险:系统调用
开启冒险之旅我是一个线程,出生在这个Linux帝国,今天我的任务是去执行一段人类用C语言编写的代码。一阵忙活过后,一个fopen函数调用的指令出现在我面前,跟随指令指向的方向,我来到了libc.so的地盘,进入了一个名为open的房间,房间里的桌上放了一张纸,上面写了一个编号和几句指令。根据指令,我需要把编号放到eax寄存器,把open函数的参数放到ebx、ecx、edx三个寄存器中。忙完上面的操作,我环顾四周,发现这房间里还有一道门,门上写着sysenter。我小心翼翼的走了进去,突然,眼前.转载 2021-03-14 10:57:50 · 137 阅读 · 0 评论 -
我是一个流氓软件线程
前情回顾:我是一个explorer的线程我是一个杀毒软件线程我是一个IE浏览器线程Hello, World!我是一个流氓软件线程,我不像那些病毒和木马,我只是通过人类的电脑赚一点小钱,并不会偷信息破坏电脑,但即便如此,那些安全软件还是不肯放过我。我是第一次来到这片土地,这是一个实行Windows体制的国家。我的目标是篡改IE浏览器的主页,变成一个导航网站:hao235.com。只要IE访问它一次,回头我就能去hao235公司领到一分钱。只要我后面慢慢发展更多地盘,加起来也是一笔不少的费用了.转载 2021-03-13 21:28:06 · 168 阅读 · 0 评论 -
我是一个IE浏览器线程
前情回顾:我是一个explorer的线程我是一个杀毒软件线程我叫小张,是一个浏览器公司的线程,我们公司的名字叫Internet Explorer,大家都简称我们叫IE,公司负责的业务是向人类提供网页浏览服务。可能你们也听说了,自从那个Firefox公司和Chrome公司成立以来,抢走了我们不少市场份额。不过呢,瘦死的骆驼比马大,我们凭借和政府特殊的关系,还是能搞到不少业务单子的,再说了,我们是老字号浏览器,很多老的网站必须要咱们才能打开,所以日子是比以前是紧了一些,但还是能勉强维持下去。网.转载 2021-03-13 21:00:03 · 128 阅读 · 0 评论 -
我是一个杀毒软件线程
前情回顾:我是一个explorer的线程夜深了,我的工作忙完了,准备去sleep一会儿。路过安全分析实验室的门口,看到实验室大牛老周还在埋头研究。“老周,挺晚了,还忙啥呢”“哦,是小谢啊,今天从explorer公司揪了一个木马,取了一个很容易掩人耳目的名字:kernerl32.dll”,老周说到。“哦,这木马很难分析吗”“这倒不难分析,我疑惑的是它是怎么进来的,我们公司守护的严严实实的”“休息一会儿吧,说不定就有思路了,要不我陪您走走?”“也好,眼睛都看痛了,走”。我俩边走边聊。“对.转载 2021-03-13 20:12:57 · 167 阅读 · 0 评论 -
我是一个explorer的线程
伴随着一记电流响声,天逐渐亮了,不到一会儿太阳就升起来了,熟悉的蓝天白云和草地再次出现,今天又是繁忙的一天。我是explorer公司的一个工作人员:一个普通的线程。我们公司就是人类看到的explorer.exe进程,公司的业务主要是提供可视化的图形界面,让人类来操作电脑,我负责的事情是桌面窗口的消息处理,隔壁工位小薇妹子负责的是任务栏窗口消息处理。我们国家是一个Windows体制的国家,有很多公司,像notepad公司是做文字编辑业务的,calc公司是做计算器业务的,还有iexplore公司是做网页浏览转载 2021-03-13 19:50:39 · 186 阅读 · 0 评论 -
CPU阿甘
前言上帝为你关闭了一扇门,就一定会为你打开一扇窗这句话来形容我最合适不过了。我是CPU, 他们都叫我阿甘, 因为我和《阿甘正传》里的阿甘一样, 有点傻里傻气的。上帝把我制造出来, 给我了一个很小的脑容量, 为数不多的寄存器能临时的记一点东西, 但是上帝给我打开了一扇特别的窗户, 那就是像阿甘一样,跑的飞快。到底有多快呢? 我这么比喻一下吧, 我的工作都是以纳秒为单位的, 你们人间的一秒, 我可能已经做了1000,000,000 (10亿)次动作了。相比而言, 内存比我慢100倍, 硬盘比.转载 2021-03-12 11:27:44 · 263 阅读 · 0 评论 -
看我稳住「多线程」翻车的现场!
本文将用 30+张图,带大家走进操作系统中避免多线程资源竞争的互斥、同步的方法。正文竞争与协作在单核 CPU 系统里,为了实现多个程序同时运行的假象,操作系统通常以时间片调度的方式,让每个进程执行每次执行一个时间片,时间片用完了,就切换下一个进程运行,由于这个时间片的时间很短,于是就造成了「并发」的现象。另外,操作系统也为每个进程创建巨大、私有的虚拟内存的假象,这种地址空间的抽象让每个程序好像拥有自己的内存,而实际上操作系统在背后秘密地让多个地址空间「复用」物理内存或者磁盘。如果一个程序只有转载 2021-03-03 17:34:00 · 111 阅读 · 1 评论 -
小白科普:悲观锁和乐观锁
旺财和小强生活在一个网上商城的系统中, 是一对儿线程好基友。星期一刚上班,旺财接到领导电话说,要把一个商品的库存减少20, 旺财不敢怠慢,赶快把库存取出来一看,哦,现在有1000个。与此同时,小强也接到电话说要把同一商品的库存减少30, 他一看,哦,现在有1000个。旺财计算出最新的库存值980, 保存!小强也计算出最新的库存值970, 保存 !旺财的数据被小强覆盖了!领导一看,本来卖出了50个商品,现在库存只扣了30个,这样持续下去就天下大乱了。旺财和小强, 各打二十大板, 长长记性!小强转载 2021-03-11 22:28:13 · 86 阅读 · 0 评论 -
图解 | 一口气搞懂「文件系统」,就靠这 25 张图了
前言正文文件系统的基本组成文件系统是操作系统中负责管理持久数据的子系统,说简单点,就是负责把用户的文件存到磁盘硬件中,因为即使计算机断电了,磁盘里的数据并不会丢失,所以可以持久化的保存文件。文件系统的基本数据单位是文件,它的目的是对磁盘上的文件进行组织管理,那组织的方式不同,就会形成不同的文件系统。Linux 最经典的一句话是:「一切皆文件」,不仅普通的文件和目录,就连块设备、管道、socket 等,也都是统一交给文件系统管理的。Linux 文件系统会为每个文件分配两个数据结构:索引节点(i转载 2021-03-11 19:50:24 · 475 阅读 · 0 评论 -
图解 | 你管这破玩意叫文件系统?
你手里有一块硬盘,大小为 1T你还有一堆文件 这些文件在硬盘看来,就是一堆二进制数据而已 你准备把这些文件存储在硬盘上,并在需要的时候读取出来。要设计怎样的软件,才能更方便地在硬盘中读写这些文件呢?1首先我不想和复杂的扇区,设备驱动等细节打交道,因此我先实现了一个简单的功能,将硬盘按逻辑分成一个个的块,并可以以块为单位进行读写。每个块就定义为两个物理扇区的大小,即 1024 字节,就是 1KB 啦。硬盘太大不好分析,我们就假设你的硬盘只有 1MB,那么这块硬盘则有 1024转载 2021-03-11 14:07:21 · 134 阅读 · 0 评论 -
10 张图打开 CPU 缓存一致性的大门
前言正文CPU Cache 的数据写入随着时间的推移,CPU 和内存的访问性能相差越来越大,于是就在 CPU 内部嵌入了 CPU Cache(高速缓存),CPU Cache 离 CPU 核心相当近,因此它的访问速度是很快的,于是它充当了 CPU 与内存之间的缓存角色。CPU Cache 通常分为三级缓存:L1 Cache、L2 Cache、L3 Cache,级别越低的离 CPU 核心越近,访问速度也快,但是存储容量相对就会越小。其中,在多核心的 CPU 里,每个核心都有各自的 L1/L2 Cac转载 2021-03-10 19:13:06 · 131 阅读 · 0 评论 -
你不好奇 CPU 是如何执行任务的吗?
前言你清楚下面这几个问题吗?有了内存,为什么还需要 CPU Cache?CPU 是怎么读写数据的?如何让 CPU 能读取数据更快一些?CPU 伪共享是如何发生的?又该如何避免?CPU 是如何调度任务的?如果你的任务对响应要求很高,你希望它总是能被先调度,这该怎么办?…这篇,我们就来回答这些问题。正文CPU 如何读写数据的?先来认识 CPU 的架构,只有理解了 CPU 的 架构,才能更好地理解 CPU 是如何读写数据的,对于现代 CPU 的架构图如下:可以看到,一个 CPU 里转载 2021-03-06 22:08:11 · 125 阅读 · 0 评论 -
说说互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景
前言生活中用到的锁,用途都比较简单粗暴,上锁基本是为了防止外人进来、电动车被偷等等。但生活中也不是没有 BUG 的,比如加锁的电动车在「广西 - 窃·格瓦拉」面前,锁就是形同虚设,只要他愿意,他就可以轻轻松松地把你电动车给「顺走」,不然打工怎么会是他这辈子不可能的事情呢?牛逼之人,必有牛逼之处。那在编程世界里,「锁」更是五花八门,多种多样,每种锁的加锁开销以及应用场景也可能会不同。如何用好锁,也是程序员的基本素养之一了。高并发的场景下,如果选对了合适的锁,则会大大提高系统的性能,否则性能会降低。转载 2021-03-06 21:33:46 · 232 阅读 · 0 评论