内部碎片:固定分区存储管理会产生内部碎片补充概念:固定分区存储管理将主存发划分为系统区和用户区,系统区存放操作系统驻留代码和数据,用户区划分为若干个连续区域,每个区域的位置固定,大小可以相同也可以不同,但是每个区域在任意时刻只能装入一道作业,一旦划分好区域,主存中的分区个数就固定了.当我们在10KB大小的一个分区中装入8KB大小的程序时,此时的分区有2KB被浪费掉了,而且由于每个分区只能装入一个程序,所以这2KB大小的空间也不能被其他的程序使用,此时我们可以说产生了2KB的内部碎片.当内部积累到一定程度时,将严重影响主存空间的利用率个系统的运行效率
外部碎片:可变分区存储管理可能产生外部碎片在可变分区存储管理中,主存中的分区不是事先划分好的,而是在主存空间充足时,根据该作页需要的空间大小分配一个分区给他,实现了作业大小等于分区大小,解决了内部碎片的问题那么,作业大小等于分区大小为什么还会产生碎片呢?来看一个例子:
上图的四个分区中有三个正在被使用,一个未被使用,那么当我们要装入大小为12KB的作业时,系统会为我们在15KB的空闲区中划分出一个12个KB大小的分区,这样这个15KB大小的 ...
页面置换算法是操作系统中用于管理虚拟内存的重要技术之一。它决定了当物理内存不足时,操作系统应该选择哪些页面从内存中移出,以便为新的页面腾出空间。以下是几种常见的页面置换算法:
先进先出(FIFO):最早进入内存的页面将最早被置换出去。这种算法简单易实现,但可能会导致”Belady’s Anomaly”现象,即增加页面数时缺页率反而增加。
最近最久未使用(LRU):选择最长时间未被访问的页面进行置换。这种算法通常能够比较好地利用局部性原理,但实现较为复杂,需要记录页面的访问时间。
最不经常使用(LFU):选择在最近一段时间内被访问次数最少的页面进行置换。这种算法适用于那些具有长期不活跃期的页面,但需要维护每个页面的访问计数器。
时钟(Clock)算法:基于一个类似于时钟的数据结构,将页面组织成一个环形链表。每个页面有一个访问位,当访问位被设置时,表示页面最近被访问过。算法按顺序扫描环形链表,如果访问位为0,则选择该页面进行置换,并将访问位置为1;如果访问位为1,则将其置为0,并继续扫描下一个页面。
最佳置换(OPT):根据未来一段时间内页面的访问情况,选择最长时间内不会被访问到的页面进行 ...
虚拟内存系统不仅仅指交换空间(swap),它是一种将逻辑地址与物理地址进行转换的技术,通过它,操作系统可以为每个进程提供独立的地址空间。
虚拟内存系统通过使用页表或段表等数据结构来实现逻辑地址到物理地址的映射。逻辑地址是由进程使用的地址空间,而物理地址是实际对应到计算机的物理内存地址。虚拟内存系统使得每个进程认为它拥有连续的私有地址空间,而实际上这些地址可能被映射到物理内存的不同位置,或者在需要时被交换到磁盘的交换空间。
虚拟内存系统的主要目的是提供以下几个方面的好处:
1.扩展地址空间:每个进程可以拥有比物理内存更大的地址空间,使得程序可以使用比实际可用内存更多的内存。
2.内存隔离:每个进程拥有独立的地址空间,彼此之间的内存访问互不干扰,提高了安全性和稳定性。
3.内存共享:虚拟内存系统允许多个进程共享同一块物理内存区域,这在进程间通信和资源共享方面非常有用。
4.内存管理:虚拟内存系统可以动态地将物理内存与磁盘上的交换空间进行交换,从而更有效地管理内存资源,提高系统的整体性能。
因此,虚拟内存系统涵盖了逻辑地址与物理地址的转换关系,以及与交换空间相关的功能。它是操作系统中重要的内 ...
上游是Cloudie
测试机器:1Core CPU1GB RAM20GB DISK1TB/Month BW100Mbps PORTLinux OS1 IPv41 IPv6Starting at$4.99/mo
性能
流媒体解锁
MTR回程路由上海电信:root@JUHOST-wTxFb1:~# mtr -rznT 202.96.209.133Start: 2023-06-27T10:16:20-0400HOST: JUHOST-wTxFb1 Loss% Snt Last Avg Best Wrst StDev
AS??? 10.182.102.53 0.0% 10 1.4 4.3 0.8 10.3 3.8
AS??? 10.82.3.254 0.0% 10 11.4 116.7 1.6 1003. 312.1
AS??? ??? 100.0 10 0.0 0.0 0.0 0.0 ...
以添加1GB SWAP为例
生成文件块SWAP一般设置为内存的2倍,并非完全以此为标准; count后面的数值为要设置的swap大小xxMB
1dd if=/dev/zero of=/var/swapfile bs=1M count=1024
创建swap文件1/sbin/mkswap /var/swapfile
激活swap文件1/sbin/swapon /var/swapfile
查看一下swap是否正确:1/sbin/swapon -s
另外为了安全建议改一下权限:
1chmod 0600 /var/swapfile
fstab文件中添加开机自动挂载设置1echo "/var/swapfile swap swap defaults 0 0" >>/etc/fstab
删除SWAP
12/sbin/swapoff /var/swapfile rm -f /var/swapfile
tar命令: 用途比较多,可以用于打包,压缩和解压缩等
打包和压缩的区别打包:将一堆文件或目录变成一个文件
压缩:将一个大文件,通过压缩算法变成一个小文件
Linux中的很多压缩算法只能对一个文件进行压缩,所以我们要压缩的话,必须先进行打包
常用的压缩算法gzip、bzip2、xz等
tar命令常用的参数-c 新建打包文件,同 -v 一起使用 查看过程中打包文件名
-x 解决文件, -C 解压到对应的文件目录。
-f 后面接要处理的文件
-j 通过bzip2方式压缩或解压,最后以.tar.br2 为后缀。压缩后大小小于.tar.gz
-z 通过gzip方式压缩或解压,最后以.tar.gz 为后缀
-v 压缩或解压过程中,显示出来过程
-t 查看打包文件中内容,重点文件名
-u 更新压缩文件中的内容。
-p 保留绝对路径,即允许备份数据中含有根目录
-P 保留数据原来权限及属性。
–exclude =FILE 压缩过程中,不要讲FILE打包
-c/-x/-t/u 不可以同时出现
1.压缩tar -jcvf 压缩文件名称.tar.br2
tar -z ...
CS和IP寄存器(在x86架构的计算机中)是两个非常重要的寄存器,它们一起组成了CPU中的指令指针,用于指示CPU当前正在执行的指令的位置。
CS寄存器(Code Segment Register)存储了代码段的起始地址,它是在编译和链接过程中由操作系统和编译器计算出来的。当CPU执行一条指令时,它会从CS寄存器指向的内存地址中读取指令代码,并将其存储到CPU中的缓存中等待执行。
IP寄存器(Instruction Pointer Register)存储了指令偏移量,它指示了CPU当前正在执行的指令在代码段中的偏移量。当CPU执行完一条指令后,它会根据IP寄存器中存储的偏移量计算出下一条指令的地址,并将其存储到CS寄存器中,然后继续执行下一条指令。
CS和IP寄存器一起组成了CPU中的指令指针,它们的值随着程序的执行而不断变化,用于控制CPU的执行流程。在操作系统中,CS和IP寄存器的值通常可以被读取和修改,从而控制程序的执行流程和运行状态。
1.CPU内部寄存器的位数 是决定其寻址能力的一个重要因素。具体来说,CPU内部寄存器的位数决定了CPU可以直接寻址的最大物理内存空间大小。例如,32位CPU最大可以直接寻址4GB的物理内存空间,64位CPU最大可以直接寻址的物理内存空间大小则高达16EB(即16 x 1024 x 1024 x 1024 x 1024 GB)
2.地址总线的位数 决定了CPU可以传输的地址信息的位数。例如,32位的地址总线可以传输32位的地址信息,因此最多可以寻址4GB的物理内存空间。
3.物理内存的大小:CPU能够寻址的物理内存空间大小受到物理内存大小的限制。如果物理内存大小超过了CPU的寻址能力,则CPU只能访问其中的一部分内存。
4.操作系统的限制:操作系统也会对CPU的寻址能力进行限制。例如,32位操作系统只能管理最多4GB的物理内存空间,即使CPU的寻址能力超过了4GB。
5. 虚拟内存技术:虚拟内存技术可以将磁盘上的空间作为物理内存使用,从而扩大了CPU的寻址能力。
总之,CPU的寻址能力受到多个因素的限制,需要综合考虑这些因素以确定CPU可以寻址的最大物理内存空间大小。
Docker 是一种容器化技术,可以在服务器上快速搭建容器并在不污染宿主机的情况下运行软件,而不再需要安装配置各种环境。开源 Docker社区致力于改进这类技术,并免费提供给所有用户,使之获益。
传统模式下运维人员需要运行 docker run来启动各种容器,一旦容器过多,就无法一次性记住所有的运行参数和命令,这时候我们可以使用 Docker Compose 来解决这个问题。Docker Compose 是一种工具,用于帮助定义和共享多容器应用程序。 通过 Compose,你可以创建 YAML 文件来定义服务,并且只需一个命令,就可以启动或清理所有内容。使用 Compose 的巨大优点是,你可以在文件中定义应用程序堆栈,使其位于项目存储库的根目录下(它现在受版本控制),并方便其他人参与你的项目。 其他人只需克隆你的存储库即可开始撰写应用。 事实上,你可能会看到 GitHub/GitLab 上的很多项目现在都是这样做的。
官方脚本安装(推荐)curl -fsSL https://get.docker.com | sh
手动安装以下操作需要在 root 用户下完成,请 ...
1.安装所需要的依赖软件包
apt install build-essential libpcre3 libpcre3-dev zlib1g-dev openssl libssl-dev -y
2.下载Nginx源码可以前往nginx官网下载最新的stable稳定版本
这里以安装1.23.4版本为例
wget https://nginx.org/download/nginx-1.23.4.tar.gz
解压 tar -xzvf nginx-1.23.4.tar.gz进入源代码目录
cd nginx-1.23.4
3. 配置和编译接下来就是make环节了,编译时候的参数可以参考官方Nginx文档:http://nginx.org/en/docs/configure.html
我自己编译Nginx时候,选择的参数一般是:
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/u ...