杂学Linux-基础篇

对于Java程序员来说,了解一定的Linux系统的知识是必须的,因为大部分服务器都是用Linux作为操作系统的,这篇文章作为我学习Linux系统的一个笔记来分享给大家,或许概念理解不是那么准确,但这是我自己学习过程中的一些通俗的理解,希望这些通俗的理解能过给予你一点点的小帮助。

一些基本概念

VFS(虚拟文件系统)

它是一个设计层面的东西,它将我们所有的程序、设备、文件、目录等一切都映射为文件系统中的一个个文件,相当于做了一个用户和操作系统硬软件之间的中间人,它屏蔽了操作系统不同硬软件的区别,让用户感觉自己无论和操作系统的任何一个硬软件打交道都是一样的操作流程,没有什么差别,其实是因为虚拟文件系统这个中间的抽象层为我们提供屏蔽掉了这种差异,可以这么说它向上给我们提供了一个统一接口,向下针对不同的硬软件做了不同的实现,才让我们有了这种感觉,其实我们访问不同的硬软件就会有不同的方式,例如,不同的设备就需要不同的驱动程序;同时正是因为它,在我们的Linux里才有了一切皆文件的概念,正是一切皆文件,才有了在我们感官上来看我们虽然操作不同的设备、硬件,但却有着相似的方法,可以说虚拟文件系统在Linux里是一个伟大的设计。

DF(文件描述符)

Linux系统的每个文件都会有自己的文件描述符,这是个什么东东呢?可以这么理解,这是个对象的引用(文件的引用),它记录了文件的基本信息(也可说元数据信息)说到DF那就的说下它在Linux里的使用场景了,明白了它的场景对我们理解这个概念非常有帮助。

作用或者使用场景:(可参考本文小知识里第五点DMA中的图) 当我们的应用程序想访问磁盘上的数据时,会向内核发出系统调用,而内核会将磁盘数据加载进入它自己的pageCache缓存页,然后将这个缓存页里的我们需要的数据的DF给到应用程序,这时我们的应用程序就可以访问我们需要的数据了,当其他的应用程序也需要这块数据时,内核会将这块数据的DF也给到其他应用程序,各个应用程序都会持有DF,都可以将操作这块数据,相当于Java集合中的迭代器对象,如果都是不操作同一个位置的数据,那么不会有影响,如果操作了同一位置的数据就会造成脏数据,这种情况这里不做详细论述,这里只是为了理解DF的作用。
在这里插入图片描述

iNode(i节点)

它相当于文件的ID,是文件的唯一标识。

常见文件类型

在这里插入图片描述
链接
可分为软链接和硬链接,软链接相当于Windows中应用的快捷方式,是一个新文件;硬链接相当于给文件起了个别名,实际文件还是一个。
在这里插入图片描述

输入输出

在Linux中,任何程序都有标准的输入(0文件描述符)、标准的输出(1文件描述符)、错误的输出(2文件描述符)
在这里插入图片描述
输入输出可称之为输入流输出流,它们相当于一个传输的管道,这样的传输管道必定有着输入源和输出源(不同的程序有着自己默认的输入源输出源)一般情况下0代表着标准输入源,1代表着标准输出源,2代表着错误输出;既然程序有着默认的输入输出源,那么我们就一定可以更改默认,我们称之为重定向,它不是一个命令,是一种机制。
在这里插入图片描述
上图中我们将 ls ./ /oosdfs 1> ls01.out 的标准输出重定向为ls01.out,因此它默认的输出没有打印到屏幕上而是写入了ls01文件中,而错误输出我们没有重定向,则输出到了屏幕; 然后我们更改了它的标准输出与错误输出;ls ./ /oosdfs 1> ls04.out 2>& 1 这条命令的意思是将标准输出重定向到文件ls04.out中而将错误输出重定向为标准输出(此时标准输出已经更改为文件ls04.out,因此标准输出错误输出都将输出到文件ls04.out中)
> 输出重定向符
< 输入重定向符
如果重定向符后面是文件描述符 则在重定向符后需要加&
在Linux里 例如我们在使用cat命令时 会有一个输入 和一个输出 此时我们可以利用重定向来指定cat的输入和输出
1< test.txt 代表将test.txt中的内容输入1(文件描述符)中 1和< 中间不能有空白 1> test.txt 代表将1中的内容写入test.txt中 同样1和> 之间也不能有空白

PageCache

为了提高内存的利用率,操作系统引入了pageCache这种缓存技术,pageCache是操作系统内核管理的一块空间,这块空间由一个个4k大小的pageCache缓存页组成,无论我们进行何种IO操作都需要经由pageCache,例如:当从磁盘读取数据时,总是会读到内核的pageCache中,由内核统一管理这块数据,然后内核将该数据页的DF给到对应的线程,这样其他线程就可以操作这块数据,而不需要每个线程都读一份进入内存,这样大大的提升了内存的利用率;可以说pageCache是我们学习IO的一个必备知识。
在这里插入图片描述
在引入pageCache后,我们的内存利用率是提高了,但它也带来了一定的问题,那就是数据一致性。有了pageCache多个线程可以修改同一个pageCache、我们写数据也是先写到pageCache中,然后再由内核将pageCache中的内容持久化到磁盘,此时,什么时候持久化?多长时间持久化?等等问题就特别重要,这些都可以通过参数调节,这里我们只是介绍下什么是pageCache,它有什么作用,所以这里不对具体的pageCache参数做过多的介绍。初次之外我们还应该知道一个概念那就是脏页,当线程写入或更改了与自己相关的pageCache,该pageCache就会被标记为脏页(pageCache由内核统一管理,内核维护着对pageCache的数据结构)。

小知识

  1. 在Linux里,/proc/目录下是Linux内核的映射

在这里插入图片描述
bash是和我们交互的程序 $$的优先级高于 $BASHPID

  1. | 管道 接收前一个命令的输出
    注:管道的左右两边会启动两个不同的线程 两线程通过管道连接
    在这里插入图片描述
    $$的优先级高于管道,因此两次的结果不一致
  2. {}用来执行多条命令 开头和结尾一定得有空格,多条命令用分号隔开
    { } 用来
  3. DMA:直接存储器访问,又称为协助处理器,当应用程序需要从磁盘读数据进入内存时,会通过80中断通知CPU,而CPU会将读数据的过程交给DMA来处理,而它自己去处理其他的线程请求,当数据加载到内存后,会以中断的形式通知CPU,在加载数据进入内存的过程中不需要CPU来参与,这样大大的提高了CPU的利用率。
    在这里插入图片描述
  4. pachCache只是计算机中一个层面的缓存而已,CPU、内存甚至硬盘都有对应的缓存机制,缓存机制的引入,一方面确实缓解了CPU与存储设备之间速度不匹配的问题,但也引入了数据一致性的问题,真是因为硬件的机制,才有了其他一些软件层面的设计。比如Java的内存模型,它其实是对底层硬件的内存模型的一种实现方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值