操作系统
文章平均质量分 74
chuixue24
这个作者很懒,什么都没留下…
展开
-
VMware虚拟机硬盘扩容详细图文教程
这篇文章主要给大家介绍了关于VMware虚拟机硬盘扩容的相关资料,现在做开发时虚拟机的使用很多,当初创建虚拟机时开辟的磁盘空间比较小,随着虚拟机安装的软件越来越多所占的空间也越来越大,导致虚拟机的磁盘空间越来越少,甚至不够用,需要的朋友可以参考下−宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取虚拟机硬盘扩容:注:如果扩容不了,把创建的快照删掉即可进行扩容,扩容好后建议先创建好快照在进行操作(一般没扩容的只有sda和sda1)(回车即可)输入y(需要将磁盘的类型转化为Linux LVM之后转载 2024-06-21 11:38:32 · 6497 阅读 · 1 评论 -
深入理解 Linux 的 I/O 系统
是操作系统对文件的缓存,用来减少对磁盘的 I/O 操作,以页为单位的,内容就是磁盘上的物理块,页缓存能帮助程序对文件进行顺序读写的速度几乎接近于内存的读写速度,主要原因就是由于 OS 使用 PageCache 机制对读写访问操作进行了性能优化。在 Linux 系统中,传统的访问方式是通过 write() 和 read() 两个系统调用实现的,通过 read() 函数读取文件到到缓存区中,然后通过 write() 方法把缓存中的数据输出到网络端口。中间的黑色实线是用户态和内核态的分界线。转载 2024-05-06 15:11:39 · 83 阅读 · 1 评论 -
原码、反码、补码 详解!
一. 机器数和机器数的真值在学习原码,反码和补码之前, 需要先了解机器数和真值的概念。1、机器数一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在计算机用机器数的最高位存放符号,正数为0,负数为1。比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是0000 0011。如果是 -3 ,就是 100 00011。那么,这里的 0000 0011 和 1000 0011 就是机器数。2、机器数的真值因为第一位是符号位,所以机器数的形式值就不等于真正的数值。转载 2023-05-10 18:55:14 · 19838 阅读 · 9 评论 -
DMA 技术是什么,在哪里用?看完绝对有收获
前文《》介绍了 Zero Copy 的本质就是 IO 设备跟用户程序空间传输数据的过程中,减少数据拷贝次数,减少系统调用,实现 CPU 的零参与,彻底消除 CPU 在这方面的负载。实现 Zero Copy 用到的最主要技术是 DMA 数据传输技术和内存区域映射技术(虚拟内存)。挖坑不断,填坑不止,通过《》我们学习了虚拟内存的底层原理。今天,我们来填一下 DMA 的大坑。从上层应用一路往下到底层硬件高速数据交换接口 DMA,越往下笔者愈感心有余而力不足,在这方面笔者也是个新人,边学边做一些笔记。转载 2023-04-24 16:29:46 · 3282 阅读 · 0 评论 -
计算机组成原理——原理篇 IO(上)
讲解了计算机里各个不同的组件之间用来通信的渠道,也就是总线。总线的设计思路,核心是为了减少多个模块之间交互的复杂性和耦合度。实际上,总线这个设计思路在我们的软件开发过程中也经常会被用到。事件总线就是我们常见的一个设计模式,通常事件总线也会和订阅者发布者模式结合起来,成为大型系统的各个松耦合的模块之间交互的一种主要模式。在实际的硬件层面,总线其实就是一组连接电路的线路。因为不同设备之间的速度有差异,所以一台计算机里面往往会有多个总线。转载 2022-12-22 17:00:09 · 907 阅读 · 0 评论 -
Linux上TCP的几个内核参数调优
Linux提供了一大堆内参参数供我们进行调优,其默认设置的参数在很多情况下并不是最佳实践,所以我们需要潜心研究,找到最适合当前环境的组合。转载 2022-09-13 14:53:14 · 1272 阅读 · 0 评论 -
查看 Linux 发行版名称和版本号的 8 种方法
如果你加入了一家新公司,要为开发团队安装所需的软件并重启服务,这个时候首先要弄清楚它们运行在什么发行版以及哪个版本的系统上,你才能正确完成后续的工作。作为系统管理员,充分了解系统信息是首要的任务。查看 Linux 发行版名称和版本号有很多种方法。你可能会问,为什么要去了解这些基本信息呢?因为对于诸如 RHEL、Debian、openSUSE、Arch Linux 这几种主流发行版来说,它们各自拥有不同的包管理器来管理系统上的软件包,如果不知道所使用的是哪一个发行版的系统,在软件包安装的时候就会无从下转载 2022-04-29 09:45:02 · 14083 阅读 · 0 评论 -
《趣谈Linux》总结十:虚拟化
37 虚拟化Linux越来越强大了,例如,内存动不动就是百G内存,网络设备一个端口的带宽就能有几十G甚至上百G,存储在数据中心至少是PB级别的(一个P是1024个T,一个T是1024个G)。这自然有了一些不灵活的地方:· 资源大小不灵活:有时候我们不需要这么大规格的机器,可能只想尝试一下某些新业务,申请个4核8G的服务器试一下,但是不可能采购这么小规格的机器。无论每个项目需要多大规格的机器,公司统一采购就限制几种,全部是上面那种大规格的。 · 资源申请不灵活:规格定死就定死吧,可是每.转载 2022-03-28 16:15:16 · 526 阅读 · 0 评论 -
《趣谈Linux》总结九:容器化
39 容器容器有一定的隔离,但是隔离性没有虚拟化那么好,仅仅做简单的封装。当然封装也带来了好处,一个是打包,二是标准;容器实现封闭的环境主要靠两种技术:一种是看起来是隔离的技术,称为namespace(命名空间);在每个 namespace 中的应用看到的,都是不同的 IP 地址、用户空间、进程 ID 等。一种是用起来是隔离的技术,称为cgroup(网络资源限制);即整台机器有很多的 CPU、内存,但是一个应用只能用其中的一部分。容器做好之后,就可以使用镜像把容器保存下来:将代码连转载 2022-03-28 15:40:59 · 251 阅读 · 0 评论 -
《趣谈Linux》总结八:网络系统
33 Socket通信无论是用socket操作TCP,还是UDP,首先都要调用socket函数,socket函数用于创建一个socket的文件描述符,唯一标识一个socket;把它叫作文件描述符,是因为在内核中会创建类似文件系统的数据结构,并且后续的操作都有用到它:int socket(int domain, int type, int protocol);三个参数的含义:domain:表示使用什么IP层协议。AF_INET表示IPv4,AF_INET6表示IPv6。type:表.转载 2022-03-28 14:59:52 · 292 阅读 · 0 评论 -
《趣谈Linux》总结七:进程间通信
29 进程间通信29.1 管道模型上一个阶段完全做完,才将输出结果交给下一个阶段“|”就是一个管道。它会将前一个命令的输出,作为后一个命令的输入。管道是一种单向传输数据的机制,它其实是一段缓存,里面的数据只能从一端写入,从另一端读出。如果想互相通信,需要创建两个管道才行。管道分为两种类型:“|” 表示的管道称为匿名管道,意思就是这个类型的管道没有名字,用完了就销毁了。竖线代表的管道随着命令的执行自动创建、自动销毁。用户甚至都不知道自己在用管道这种技术,就已经解决了问题。另外转载 2022-03-25 20:30:33 · 353 阅读 · 0 评论 -
《趣谈Linux》总结六:输入输出系统
26 输入与输出输入输出系统是一个生态,类比售前售后生态体系,这不仅仅是招聘一些售前和售后员工,而是应该建立一套体系让供应商、渠道帮着卖,形成一个生态。计算机系统的输入和输出系统有:键盘、鼠标、显示器、网卡、硬盘、打印机、CD/DVD等等,多种多样。这样方便用户使用了,但是对于操作系统来讲,却是一件复杂的事情,因为这么多设备,形状、用法、功能都不一样,怎么才能统一管理起来呢?核心思想:加中间层26.1 用设备控制器屏蔽设备差异CPU并不直接和设备打交道,它们中间有一个叫作设备控制器(De转载 2022-03-21 13:46:44 · 333 阅读 · 0 评论 -
《趣谈Linux》总结五:文件系统
22 文件系统可以永久保存文件22.1 功能规划需要考虑的问题:1 文件系统要有严格的组织形式,使得文件能够以块为单位进行存储2 文件系统中也要有索引区,用来方便查找一个文件分成的多个块都存放在了什么位置3 如果文件系统中有的文件是热点文件,近期经常被读取和写入,文件系统应该有缓存层4 文件应该用文件夹的形式组织起来,方便管理和查询,即分门别类,形成树形结构,也可以减少命名冲突,因为不同节点下的节点文件可以重名5 Linux内核要在自己的内存里面维护一套数据结构,来保存哪些文转载 2022-03-19 17:41:14 · 408 阅读 · 0 评论 -
《趣谈Linux》总结四:内存管理
16 内存管理(上)-规划进程内存空间布局每个进程应该有自己的内存空间。内存空间都是独立的、相互隔离的。对于每个进程来讲,看起来应该都是独占的。16.1 独享内存空间的原理内存都被分成一块一块儿的,都编好了号,这些一块一块的地址是实实在在的地址,通过这个地址我们就能够定位到物理内存的位置;如果所有进程都使用这些地址,同时发生同一个位置的写操作时很容易起冲突所以使用虚拟地址:物理地址对于进程不可见,谁也不能直接访问这个物理地址。操作系统会给进程分配一个虚拟地址。所有进程看到的这个地址转载 2022-03-19 16:19:53 · 893 阅读 · 0 评论 -
《趣谈Linux》总结三:进程/线程
8 进程管理有了系统调用,就可以开始创建进程了8.1 通过写代码使用系统调用创建一个进程在 Linux 上写程序和编译程序,也需要一系列的开发套件,就像 IDEA 一样;运行下面的命令,就可以在 centOS 7 操作系统上安装开发套件:yum -y groupinstall "Development Tools"在 Windows 上写的程序,都会被保存成.h 或者.c 文件,容易让人感觉这是某种有特殊格式的文件,但其实这些文件只是普普通通的文本文件。因而在 Linux上,用 V转载 2022-03-18 18:50:04 · 293 阅读 · 0 评论 -
《趣谈Linux》总结二:系统初始化
4 x86架构对于linux来说,如果下面的硬件环境千差万别,就会很难集中精力做出让用户易用的产品;毕竟天天适配不同的平台,就已经够辛苦了;x86 架构就是这样一个开放的平台。4.1 计算机的工作模式对于一个计算机来讲,最核心的就是CPU(Central Processing Unit,中央处理器)。这是这台计算机的大脑,所有的设备都围绕它展开。CPU 和其他设备连接,要靠一种叫作总线(Bus)的东西,其实就是主板上密密麻麻的集成电路,这些东西组成了 CPU 和其他设备的高速通道。.转载 2022-03-18 14:47:48 · 477 阅读 · 0 评论 -
《趣谈Linux》总结一:Linux前导知识
1 Linux综述将linux比作一个外包公司,则有如下图的运作:操作系统内核体系结构图:简要叙述鼠标和键盘是计算机的输入设备。大部分的普通用户想要告诉计算机应该做什么,都是通过这两个设备。例如,用户移动了一下鼠标,鼠标就会通过鼠标线给电脑发消息,告知电脑,鼠标向某个方向移动了多少距离;对于操作系统来讲,输入设备工作时会发送一个中断,此为中断事件,在操作系统里面调用中断处理函数屏幕,也就是显示器,是计算机的输出设备,将计算机处理用户请求后的结果展现给客户,要不然用户无法转载 2022-03-16 14:40:10 · 272 阅读 · 0 评论 -
《Linux内核技术实战课》总结一:PageCache
总览Page Cache:内核管理的内存场景:服务器的 load 飙高; 服务器的 I/O 吞吐飙高; 业务响应时延出现大的毛刺; 业务平均访问时延明显增加应用程序产生Page Cache的逻辑示意图,是在应用程序读写文件的过程中产生的产生,即被分配:有两种方式1 标准 I/O 是写的 (write) 用户缓冲区 (Userpace Page 对应的内存),然后再将用户缓冲区里的数据拷贝到内核缓冲区 (Pagecache Page 对应的内存);如果是读的 (read) 话则 是先从内转载 2022-03-14 15:39:07 · 1504 阅读 · 0 评论 -
《Linux性能优化》总结:cpu性能、内存性能、文件系统性能、网络性能
来源极客时间cpu总览uptime可查看系统平均负载:平均活跃进程数(可运行、不可中断)cpu个数:grep ‘model_name’ /proc/cpuinfo | wc -lmpstat:实时查看cpu性能指标(整体)pidstat:实时查看进程的cpu、内存、io、上下文切换等性能指标stress:压测iostat:io状态超过百分之70的使用率就该警醒cpucpu上下文切换:进程/线程/中断上下文切换vmstat:查看系统上下文切换情况、系统内存使用情况转载 2022-03-14 15:16:18 · 392 阅读 · 0 评论 -
Java Runtime.exec()的使用
Sun的doc里其实说明还有其他的用法:exec(String[] cmdarray, String[] envp, File dir)Executes the specified command and arguments in a separate process with the specified environment and working directory.那个dir就是调用的程序的工作目录,这句其实还是很有用的。Windows下调用程序Process proc =R转载 2022-01-05 14:27:25 · 994 阅读 · 0 评论 -
linux top 中的time+
op命令的TIME/TIME+是指的进程所使用的CPU时间,不是进程启动到现在的时间,因此,如果一个进程使用的cpu很少,那即使这个进程已经存在N长时间,TIME/TIME+也是很小的数值。此外,如果你的系统有多个CPU,或者是多核CPU的话,那么,进程占用多个cpu的时间是累加的。top的manual page:top(1): tasks - Linux man page看看他的帮助说明:l: TIME — CPU TimeTotal CPU time the task has used s转载 2021-12-10 15:12:35 · 1356 阅读 · 0 评论 -
内核如何阻塞与唤醒进程?
进程和线程我们先从 Linux 的进程谈起,操作系统要运行一个可执行程序,首先要将程序文件加载到内存,然后 CPU 去读取和执行程序指令,而一个进程就是“一次程序的运行过程”,内核会给每一个进程创建一个名为task_struct的数据结构,而内核也是一段程序,系统启动时就被加载到内存中了。进程在运行过程中要访问内存,而物理内存是有限的,比如 16GB,那怎么把有限的内存分给不同的进程使用呢?跟 CPU 的分时共享一样,内存也是共享的,Linux 给每个进程虚拟出一块很大的地址空间,比如 32 位机器转载 2021-11-05 13:43:21 · 1051 阅读 · 0 评论 -
CPU密集和IO密集
CPU密集型(CPU-bound) CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/内存),I/O在很短的时间就可以完成,而CPU还有许多运算要处理,CPU Loading很高。 在多重程序系统中,大部份时间用来做计算、逻辑判断等CPU动作的程序称之CPU bound。例如一个计算圆周率至小数点一千位以下 的程序,在执行的过程当中绝大部份时间用在三角函数和开根号的计算,便是属于原创 2021-10-12 13:52:55 · 526 阅读 · 0 评论 -
CPU缓存一致性协议MESI
CPU高速缓存(Cache Memory) CPU为何要有高速缓存 CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU。这 就造成了高性能能的内存和硬盘价格及其昂贵。然而CPU的高度运算需要高速的数据。为了解决这个问题,CPU厂商在CPU中内置了少量的高速缓存以解决I\O速度和CPU运算速度之间的不匹配问题。 在CPU访问存储设备时,无论是存取数据抑或存取指令,都趋于聚集在一片连续的区域中,这就被称为局 部性原理。 时间局部性(Temporal L原创 2021-10-04 12:04:56 · 127 阅读 · 0 评论 -
CPU局部性原理
在CPU访问存储设备时,无论是存取数据抑或存取指令,都趋于聚集在一片连续的区域中,这就被称为局部性原理。 时间局部性(Temporal Locality):如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。 比如循环、递归、方法的反复调用等。 空间局部性(Spatial Locality):如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。 比如顺序执行的代码、连续创建的两个对象、数组等。 举个空间局部性原则例子: 1 public class TwoDimensio原创 2021-10-04 11:29:11 · 736 阅读 · 0 评论 -
UMA与NUMA
原创 2021-08-04 17:06:43 · 209 阅读 · 0 评论 -
Netty对零拷贝(Zero Copy)三个层次的实现
首先我们来看一下维基百科对零拷贝给出的定义:零拷贝描述了一种计算机中的操作,即CPU在执行某项任务时不需要先将数据从内存中的一个位置移动到另一个位置就可以完成操作,从而节省了CPU时钟周期和内存带宽。从上面的描述可以看出,其实只要是节省了一次或多次数据的复制就可以称之为零拷贝了,这其实是一种广义的定义。在Netty中对于零拷贝有三个层次的实现,我们就一条条分析一下。避免数据流经用户空间在操作系统层面,将数据从来源设备A发送到目标设备B时,需要先将数据~~从A的内核空间读缓冲区复制到用户空间缓转载 2021-04-25 13:33:11 · 454 阅读 · 0 评论 -
Java通过零拷贝实现高效的数据传输
零拷贝,零开销本文仅是中文版本,原文由 Sathish Palaniappan, Pramod Nagaraja 发布于 2008年09月2号。文章适合初次接触零拷贝技术并想进一步学习的读者,零拷贝本身是一种思想,不与任何编程语言绑定,不懂Java的读者可以跳过零拷贝技术在Java中实现的具体细节。许多Web应用提供大量的静态内容,主要就是从磁盘读取数据然后将数据写回套接字,中间不涉及数据的变换。这种操作对CPU的使用相对较少,但是效率很低:首先,内核从文件读取数据,然后将数据从内核空间拷贝到用转载 2021-04-25 13:25:11 · 413 阅读 · 0 评论 -
虚拟内存MMU和TLB
原创 2021-04-23 16:56:11 · 339 阅读 · 0 评论 -
计算密集和I/O密集
如下图所示,a为计算密集,b为i/o密集。a:cpu时间偏很长,b:cpu时间篇较短,io频率较高。原创 2021-04-23 15:07:43 · 144 阅读 · 0 评论 -
linux系统IO概念及文件描述符
原创 2021-02-03 15:00:18 · 143 阅读 · 0 评论 -
计算机总线结构图
![graph TD;A-->B;B-->C;](https://img-blog.csdnimg.cn/20210203142400678.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NodWl4dWUyNA==,size_16,color_FFFFFF,t_70)![在这里插入图片描述](https://img-blog.cs原创 2021-02-03 14:24:14 · 2153 阅读 · 0 评论 -
深入浅出计算机组成原理
https://time.geekbang.org/column/article/98872原创 2021-01-14 22:46:20 · 766 阅读 · 0 评论 -
CPU中的指令周期、CPU周期和时钟周期
计算机中我们常常会混淆指令周期、CPU周期和时钟周期,要区分这些并不难,但要想彻底弄懂这些,就得要求我们对CPU底层有一定了解。一.指令周期指令周期:是指计算机从取指到指令执行完毕的时间计算机执行指令的过程可以分为以下三个步骤:Fetch(取指),也就是从 PC 寄存器里找到对应的指令地址,根据指令地址从内存里把具体的指令,加载到指令寄存器中,然后把 PC 寄存器自增,好在未来执行下一条指令。 Decode(译码),也就是根据指令寄存器里面的指令,解析成要进行什么样的操作,是 R、I、J转载 2021-01-14 22:44:00 · 14890 阅读 · 1 评论 -
时间单位换算
1s=1000ms=1000000微秒=1000000000纳秒=1000000000000皮秒=10^15飞秒=10^18啊秒=10^21仄秒=10^24幺秒1s=10^3ms(毫秒)=10^6μs(微秒)=10^9ns(纳秒)=10^12ps(皮秒)=10^15fs(飞秒)=10^18as(阿秒)=10^21zm(仄秒)=10^24ym(幺秒)原创 2021-01-14 22:20:59 · 507 阅读 · 0 评论 -
Java 代码是怎么执行的
结合 CPU 理解一行 Java 代码是怎么执行的根据冯·诺依曼思想,计算机采用二进制作为数制基础,必须包含:运算器、控制器、存储设备,以及输入输出设备,如下图所示。我们先来分析 CPU 的工作原理,现代 CPU 芯片中大都集成了,控制单元,运算单元,存储单元。控制单元是 CPU 的控制中心, CPU 需要通过它才知道下一步做什么,也就是执行什么指令,控制单元又包含:指令寄存器(IR ),指令译码器( ID )和操作控制器( OC )。 当程序被加载进内存后,指令就在内存中了,这个时候说的内存是转载 2021-01-04 00:15:52 · 322 阅读 · 0 评论 -
从电路到cpu
请看这个视频。只看1-7集从最基本的电路到cpu,总共不过80分钟,讲的非常详尽又浅显易懂,而且逻辑清晰层层递进,高中水平可看懂。(已经由CrashCourse字幕组翻译为中文):https://www.bilibili.com/video/av21376839/www.bilibili.com...原创 2021-01-03 16:16:38 · 149 阅读 · 0 评论 -
深入理解Java虚拟机-HotSpot虚拟机对象探秘
一、对象的创建过程虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那就先执行相应的类加载过程。 在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来,划分方式有指针碰撞和空闲列表两种,划分方式的选择取决于垃圾回收算法是否支持压缩整理功能,因此,在使用Serial、ParNew转载 2020-12-31 10:35:33 · 145 阅读 · 0 评论 -
句柄的意义和作用以及句柄和指针的区别
句柄 什么是句柄?首先这个单词听起来就有点怪,只知道有把柄,句柄对应单词是handle,把手,一个门把手可以打开一扇房间的门,句柄是一个特殊的代号,windonw系统可以通过一个特定的句柄打开一个特定的对象,所以这个句柄就是一个特殊作用的代号编码。为什么有句柄?句柄的作用是什么? 程序的运行需要使用内存来存储数据和指令,cpu根据内存的地址来取对应的数据,然而物理内存的大小空间在安装好后是固定不变的,在程序运行中可能出现物理内存不够的情况,这个时候windows系统开发者就想出一个虚拟...转载 2020-12-31 10:24:17 · 1630 阅读 · 0 评论 -
进程,线程与多核,多cpu之间的关系
目录cpu架构和工作原理多核cpu和多cpu架构cpu的缓存进程和线程进程和线程在多核cpu,多cpu中的运行关系cpu架构和工作原理计算机有5大基本组成部分,运算器,控制器,存储器,输入和输出。运算器和控制器封装到一起,加上寄存器组和cpu内部总线构成中央处理器(CPU)。cpu的根本任务,就是执行指令,对计算机来说,都是0,1组成的序列,cpu从逻辑上可以划分为3个模块:控制单元、运算单元和存储单元。这三个部分由cpu总线连接起来。CPU的运行原理就是:控制单元在转载 2020-12-31 10:05:23 · 188 阅读 · 0 评论