程序员必备知识( *** 作系统5-文件系统)

程序员必备知识( *** 作系统5-文件系统),第1张

本篇与之前的第三篇的内存管理知识点有相似的地方

对于运行的进程来说,内存就像一个纸箱子, 仅仅是一个暂存数据的地方, 而且空间有限。如果我们想要进程结束之后,数据依然能够保存下来,就不能只保存在内存里,而是应该保存在 外部存储 中。就像图书馆这种地方,不仅空间大,而且能够永久保存。

我们最常用的外部存储就是 硬盘 ,数据是以文件的形式保存在硬盘上的。为了管理这些文件,我们在规划文件系统的时候,需要考虑到以下几点。

第一点,文件系统要有严格的组织形式,使得文件能够 以块为单位进行存储 。这就像图书馆里,我们会给设置一排排书架,然后再把书架分成一个个小格子,有的项目存放的资料非常多,一个格子放不下,就需要多个格子来进行存放。我们把这个区域称为存放原始资料的 仓库区 。

第二点,文件系统中也要有 索引区 ,用来方便查找一个文件分成的多个块都存放在了什么位置。这就好比,图书馆的书太多了,为了方便查找,我们需要专门设置一排书架,这里面会写清楚整个档案库有哪些资料,资料在哪个架子的哪个格子上。这样找资料的时候就不用跑遍整个档案库,在这个书架上找到后,直奔目标书架就可以了。

第三点,如果文件系统中有的文件是热点文件,近期经常被读取和写入,文件系统应该有 缓存层 。这就相当于图书馆里面的热门图书区,这里面的书都是畅销书或者是常常被借还的图书。因为借还的次数比较多,那就没必要每次有人还了之后,还放回遥远的货架,我们可以专门开辟一个区域, 放置这些借还频次高的图书。这样借还的效率就会提高。

第四点,文件应该用 文件夹 的形式组织起来,方便管理和查询。这就像在图书馆里面,你可以给这些资料分门别类,比如分成计算机类文学类历史类等等。这样你也容易管理,项目组借阅的时候只要在某个类别中去找就可以了。

在文件系统中,每个文件都有一个名字,这样我们访问一个文件,希望通过它的名字就可以找到。文件名就是一个普通的文本。 当然文件名会经常冲突,不同用户取相同的名字的情况还是会经常出现的。

要想把很多的文件有序地组织起来,我们就需要把它们成为 目录 或者文件夹。这样,一个文件夹里可以包含文件夹,也可以包含文件,这样就形成了一种 树形结构 。而我们可以将不同的用户放在不同的用户目录下,就可以一定程度上避免了命名的冲突问题。

第五点,Linux 内核要在自己的内存里面维护一套数据结构,来保存哪些文件被哪些进程打开和使用 。这就好比,图书馆里会有个图书管理系统,记录哪些书被借阅了,被谁借阅了,借阅了多久,什么时候归还。

文件系统是 *** 作系统中负责管理持久数据的子系统,说简单点,就是负责把用户的文件存到磁盘硬件中,因为即使计算机断电了,磁盘里的数据并不会丢失,所以可以持久化的保存文件。

文件系统的基本数据单位是 文件 ,它的目的是对磁盘上的文件进行组织管理,那组织的方式不同,就会形成不同的文件系统。

Linux最经典的一句话是:“一切皆文件”,不仅普通的文件和目录,就连块设备、管道、socket 等,也都是统一交给文件系统管理的。

Linux文件系统会为每个文件分配两个数据结构: 索引节点(index node) 和 目录项(directory entry) ,它们主要用来记录文件的元信息和目录层次结构。

●索引节点,也就是inode, 用来记录文件的元信息,比如inode编号、文件大小访问权限、创建时间、修改时间、 数据在磁盘的位置 等等。 索引节点是文件的唯一标识 ,它们之间一一对应, 也同样都会被 存储在硬盘 中,所以索引节点同样占用磁盘空间。

●目录项,也就是dentry, 用来记录文件的名字、索引节点指针以及与其他目录项的层级关联关系。多个目录项关联起来,就会形成 目录结构 ,但它与索引节点不同的是,目录项是由内核维护的一个数据结构,不存放于磁盘,而是 缓存在内存 。

由于索引节点唯一标识一个文件,而目录项记录着文件的名,所以目录项和索引节点的关系是多对一,也就是说,一个文件可以有多个别字。比如,硬链接的实现就是多个目录项中的索引节点指向同一个文件。

注意,目录也是文件,也是用索引节点唯一标识,和普通文件不同的是,普通文件在磁盘里面保存的是文件数据,而目录文件在磁盘里面保存子目录或文件。

(PS:目录项和目录不是一个东西!你也不是一个东西(^_=), 虽然名字很相近,但目录是个文件。持久化存储在磁盘,而目录项是内核一个数据结构,缓存在内存。

如果查询目录频繁从磁盘读,效率会很低,所以内核会把已经读过的目录用目录项这个数据结构缓存在内存,下次再次读到相同的目录时,只需从内存读就可以,大大提高了 文件系统的效率。

目录项这个数据结构不只是表示目录,也是可以表示文件的。)

磁盘读写的最小单位是 扇区 ,扇区的大小只有512B大小,很明显,如果每次读写都以这么小为单位,那这读写的效率会非常低。

所以,文件系统把多个扇区组成了一个 逻辑块 ,每次读写的最小单位就是逻辑块(数据块) , Linux中的逻辑块大小为4KB,也就是一次性读写 8个扇区,这将大大提高了磁盘的读写的效率。

以上就是索引节点、目录项以及文件数据的关系,下面这个图就很好的展示了它们之间的关系:

索引节点是存储在硬盘上的数据,那么为了加速文件的访问,通常会把索引节点加载到内存中。

另外,磁盘进行格式化的时候,会被分成三个存储区域,分别是超级块、索引节点区和数据块区。

●超级块,用来存储文件系统的详细信息,比如块个数、块大小、空闲块等等。

●索引节点区,用来存储索引节点;

●数据块区,用来存储文件或目录数据;

我们不可能把超级块和索引节点区全部加载到内存,这样内存肯定撑不住,所以只有当需要使用的时候,才将其加载进内存,它们加载进内存的时机是不同的

●超级块:当文件系统挂载时进入内存;

●索引节点区:当文件被访问时进入内存;

文件系统的种类众多,而 *** 作系统希望 对用户提供一个统一的接口 ,于是在用户层与文件系统层引入了中间层,这个中间层就称为 虚拟文件系统(Virtual File System, VFS) 。

VFS定义了一组所有文件系统都支持的数据结构和标准接口,这样程序员不需要了解文件系统的工作原理,只需要了解VFS提供的统一接口即可。

在Linux文件系统中,用户空间、系统调用、虚拟机文件系统、缓存、文件系统以及存储之间的关系如下图:

Linux支持的文件系统也不少,根据存储位置的不同,可以把文件系统分为三类:

●磁盘的文件系统,它是直接把数据存储在磁盘中,比如Ext 2/3/4 XFS 等都是这类文件系统。

●内存的文件系统,这类文件系统的数据不是存储在硬盘的,而是占用内存空间,我们经常用到的/proc 和/sys文件系统都属于这一类,读写这类文件,实际上是读写内核中相关的数据。

●网络的文件系统,用来访问其他计算机主机数据的文件系统,比如NFS SMB等等。

文件系统首先要先挂载到某个目录才可以正常使用,比如Linux系统在启动时,会把文件系统挂载到根目录。

在 *** 作系统的辅助之下,磁盘中的数据在计算机中都会呈现为易读的形式,并且我们不需要关心数据到底是如何存放在磁盘中,存放在磁盘的哪个地方等等问题,这些全部都是由 *** 作系统完成的。

那么,文件数据在磁盘中究竟是怎么样的呢我们来一探究竟!

磁盘中的存储单元会被划分为一个个的“ 块 ”,也被称为 扇区 ,扇区的大小一般都为512byte这说明即使一块数据不足512byte,那么它也要占用512byte的磁盘空间。

而几乎所有的文件系统都会把文件分割成固定大小的块来存储,通常一个块的大小为4K。如果磁盘中的扇区为512byte,而文件系统的块大小为4K,那么文件系统的存储单元就为8个扇区。这也是前面提到的一个问题,文件大小和占用空间之间有什么区别文件大小是文件实际的大小,而占用空间则是因为即使它的实际大小没有达到那么大,但是这部分空间实际也被占用,其他文件数据无法使用这部分的空间。所以我们 写入1byte的数据到文本中,但是它占用的空间也会是4K。

这里要注意在Windows下的NTFS文件系统中,如果一开始文件数据小于 1K,那么则不会分配磁盘块来存储,而是存在一个文件表中。但是一旦文件数据大于1K,那么不管以后文件的大小,都会分配以4K为单位的磁盘空间来存储。

与内存管理一样,为了方便对磁盘的管理,文件的逻辑地址也被分为一个个的文件块。于是文件的逻辑地址就是(逻辑块号,块内地址)。用户通过逻辑地址来 *** 作文件, *** 作系统负责完成逻辑地址与物理地址的映射。

不同的文件系统为文件分配磁盘空间会有不同的方式,这些方式各自都有优缺点。

连续分配要求每个文件在磁盘上有一组连续的块,该分配方式较为简单。

通过上图可以看到,文件的逻辑块号的顺序是与物理块号相同的,这样就可以实现随机存取了,只要知道了第一个逻辑块的物理地址, 那么就可以快速访问到其他逻辑块的物理地址。那么 *** 作系统如何完成逻辑块与物理块之间的映射呢实际上,文件都是存放在目录下的,而目录是一种有结构文件, 所以在文件目录的记录中会存放目录下所有文件的信息,每一个文件或者目录都是一个记录。 而这些信息就包括文件的起始块号和占有块号的数量。

那么 *** 作系统如何完成逻辑块与物理块之间的映射呢 (逻辑块号, 块内地址) -> (物理块号, 块内地址),只需要知道逻辑块号对应的物理块号即可,块内地址不变。

用户访问一个文件的内容, *** 作系统通过文件的标识符找到目录项FCB, 物理块号=起始块号+逻辑块号。 当然,还需要检查逻辑块号是否合法,是否超过长度等。因为可以根据逻辑块号直接算出物理块号,所以连续分配支持 顺序访问和随机访问 。

因为读/写文件是需要移动磁头的,如果访问两个相隔很远的磁盘块,移动磁头的时间就会变长。使用连续分配来作为文件的分配方式,会使文件的磁盘块相邻,所以文件的读/写速度最快。

连续空间存放的方式虽然读写效率高,但是有 磁盘空间碎片 和 文件长度不易扩展 的缺陷。

如下图,如果文件B被删除,磁盘上就留下一块空缺,这时,如果新来的文件小于其中的一个空缺,我们就可以将其放在相应空缺里。但如果该文件的大小大于所

有的空缺,但却小于空缺大小之和,则虽然磁盘上有足够的空缺,但该文件还是不能存放。当然了,我们可以通过将现有文件进行挪动来腾出空间以容纳新的文件,但是这个在磁盘挪动文件是非常耗时,所以这种方式不太现实。

另外一个缺陷是文件长度扩展不方便,例如上图中的文件A要想扩大一下,需要更多的磁盘空间,唯一的办法就只能是挪动的方式,前面也说了,这种方式效率是非常低的。

那么有没有更好的方式来解决上面的问题呢答案当然有,既然连续空间存放的方式不太行,那么我们就改变存放的方式,使用非连续空间存放方式来解决这些缺陷。

非连续空间存放方式分为 链表方式 和 索引方式 。

链式分配采取离散分配的方式,可以为文件分配离散的磁盘块。它有两种分配方式:显示链接和隐式链接。

隐式链接是只目录项中只会记录文件所占磁盘块中的第一块的地址和最后一块磁盘块的地址, 然后通过在每一个磁盘块中存放一个指向下一 磁盘块的指针, 从而可以根据指针找到下一块磁盘块。如果需要分配新的磁盘块,则使用最后一块磁盘块中的指针指向新的磁盘块,然后修改新的磁盘块为最后的磁盘块。

我们来思考一个问题, 采用隐式链接如何将实现逻辑块号转换为物理块号呢

用户给出需要访问的逻辑块号i, *** 作系统需要找到所需访问文件的目录项FCB从目录项中可以知道文件的起始块号,然后将逻辑块号0的数据读入内存,由此知道1号逻辑块的物理块号,然后再读入1号逻辑块的数据进内存,此次类推,最终可以找到用户所需访问的逻辑块号i。访问逻辑块号i,总共需要i+ 1次磁盘1/0 *** 作。

得出结论: 隐式链接分配只能顺序访问,不支持随机访问,查找效率低 。

我们来思考另外一个问题,采用隐式链接是否方便文件拓展

我们知道目录项中存有结束块号的物理地址,所以我们如果要拓展文件,只需要将新分配的磁盘块挂载到结束块号的后面即可,修改结束块号的指针指向新分配的磁盘块,然后修改目录项。

得出结论: 隐式链接分配很方便文件拓展。所有空闲磁盘块都可以被利用到,无碎片问题,存储利用率高。

显示链接是把用于链接各个物理块的指针显式地存放在一张表中,该表称为文件分配表(FAT, File Allocation Table)。

由于查找记录的过程是在内存中进行的,因而不仅显著地 提高了检索速度 ,而且 大大减少了访问磁盘的次数 。但也正是整个表都存放在内存中的关系,它的主要的缺点是 不适 用于大磁盘 。

比如,对于200GB的磁盘和1KB大小的块,这张表需要有2亿项,每一项对应于这2亿个磁盘块中的一个块,每项如果需要4个字节,那这张表要占用800MB内存,很显然FAT方案对于大磁盘而言不太合适。

一直都在,加油!(゜Д゜)σ凸←自爆按钮

链表的方式解决了连续分配的磁盘碎片和文件动态打展的问题,但是不能有效支持直接访问(FAT除外) ,索引的方式可以解决这个问题。

索引的实现是为每个文件创建一个 索引数据块 ,里面存放的 是指向文件数据块的指针列表 ,说白了就像书的目录一样,要找哪个章节的内容,看目录查就可以。

另外, 文件头需要包含指向索引数据块的指针 ,这样就可以通过文件头知道索引数据块的位置,再通过索弓|数据块里的索引信息找到对应的数据块。

创建文件时,索引块的所有指针都设为空。当首次写入第i块时,先从空闲空间中取得一个块, 再将其地址写到索引块的第i个条目。

索引的方式优点在于:

●文件的创建、增大、缩小很方便;

●不会有碎片的问题;

●支持顺序读写和随机读写;

由于索引数据也是存放在磁盘块的,如果文件很小,明明只需一块就可以存放的下,但还是需要额外分配一块来存放索引数据,所以缺陷之一就是存储索引带来的开销。

如果文件很大,大到一个索引数据块放不下索引信息,这时又要如何处理大文件的存放呢我们可以通过组合的方式,来处理大文件的存储。

先来看看 链表+索引 的组合,这种组合称为 链式索引块 ,它的实现方式是在 索引数据块留出一个存放下一个索引数据块的指针 ,于是当一个索引数据块的索引信息用完了,就可以通过指针的方式,找到下一个索引数据块的信息。那这种方式也会出现前面提到的链表方式的问题,万一某个指针损坏了,后面的数据也就会无法读取了。

还有另外一种组合方式是 索引+索引 的方式,这种组合称为多级索引块,实现方式是通过一个索引块来存放多个索引数据块,一层套一层索引, 像极了俄罗斯套娃是吧๑乛◡乛๑ 

前面说到的文件的存储是针对已经被占用的数据块组织和管理,接下来的问题是,如果我要保存一个数据块, 我应该放在硬盘上的哪个位置呢难道需要将所有的块扫描一遍,找个空的地方随便放吗

那这种方式效率就太低了,所以针对磁盘的空闲空间也是要引入管理的机制,接下来介绍几种常见的方法:

●空闲表法

●空闲链表法

●位图法

空闲表法

空闲表法就是为所有空闲空间建立一张表,表内容包括空闲区的第一个块号和该空闲区的块个数,注意,这个方式是连续分配的。如下图:

当请求分配磁盘空间时,系统依次扫描空闲表里的内容,直到找到一个合适的空闲区域为止。当用户撤销一个文件时,系统回收文件空间。这时,也需顺序扫描空闲表,寻找一个空闲表条目并将释放空间的第一个物理块号及它占用的块数填到这个条目中。

这种方法仅当有少量的空闲区时才有较好的效果。因为,如果存储空间中有着大量的小的空闲区,则空闲表变得很大,这样查询效率会很低。另外,这种分配技术适用于建立连续文件。

空闲链表法

我们也可以使用链表的方式来管理空闲空间,每一个空闲块里有一个指针指向下一个空闲块,这样也能很方便的找到空闲块并管理起来。如下图:

当创建文件需要一块或几块时,就从链头上依次取下一块或几块。反之,当回收空间时,把这些空闲块依次接到链头上。

这种技术只要在主存中保存一个指针, 令它指向第一个空闲块。其特点是简单,但不能随机访问,工作效率低,因为每当在链上增加或移动空闲块时需要做很多1/0 *** 作,同时数据块的指针消耗了一定的存储空间。

空闲表法和空闲链表法都不适合用于大型文件系统,因为这会使空闲表或空闲链表太大。

位图法

位图是利用二进制的一位来表示磁盘中一个盘块的使用情况,磁盘上所有的盘块都有一个二进制位与之对应。

当值为0时,表示对应的盘块空闲,值为1时,表示对应的盘块已分配。它形式如下:

在Linux文件系统就采用了位图的方式来管理空闲空间,不仅用于数据空闲块的管理,还用于inode空闲块的管理,因为inode也是存储在磁盘的,自然也要有对其管理。

前面提到Linux是用位图的方式管理空闲空间,用户在创建一个新文件时, Linux 内核会通过inode的位图找到空闲可用的inode,并进行分配。要存储数据时,会通过块的位图找到空闲的块,并分配,但仔细计算一下还是有问题的。

数据块的位图是放在磁盘块里的,假设是放在一个块里,一个块4K,每位表示一个数据块,共可以表示4 1024 8 = 2^15个空闲块,由于1个数据块是4K大小,那么最大可以表示的空间为2^15 4 1024 = 2^27个byte,也就是128M。

也就是说按照上面的结构,如果采用(一个块的位图+ 一系列的块),外加一(个块的inode的位图+一系列的inode)的结构能表示的最大空间也就128M,

这太少了,现在很多文件都比这个大。

在Linux文件系统,把这个结构称为一个 块组 ,那么有N多的块组,就能够表示N大的文件。

最终,整个文件系统格式就是下面这个样子。

最前面的第一个块是引导块,在系统启动时用于启用引导,接着后面就是一个一个连续的块组了,块组的内容如下:

● 超级块 ,包含的是文件系统的重要信息,比如inode总个数、块总个数、每个块组的inode个数、每个块组的块个数等等。

● 块组描述符 ,包含文件系统中各个块组的状态,比如块组中空闲块和inode的数目等,每个块组都包含了文件系统中「所有块组的组描述符信息」。

● 数据位图和inode位图 ,用于表示对应的数据块或inode是空闲的,还是被使用中。

● inode 列表 ,包含了块组中所有的inode, inode 用于保存文件系统中与各个文件和目录相关的所有元数据。

● 数据块 ,包含文件的有用数据。

你可以会发现每个块组里有很多重复的信息,比如 超级块和块组描述符表,这两个都是全局信息,而且非常的重要 ,这么做是有两个原因:

●如果系统崩溃破坏了超级块或块组描述符,有关文件系统结构和内容的所有信息都会丢失。如果有冗余的副本,该信息是可能恢复的。

●通过使文件和管理数据尽可能接近,减少了磁头寻道和旋转,这可以提高文件系统的性能。

不过,Ext2 的后续版本采用了稀疏技术。该做法是,超级块和块组描述符表不再存储到文件系统的每个块组中,而是只写入到块组0、块组1和其他ID可以表示为3、5、7的幂的块组中。

在前面,我们知道了一个普通文件是如何存储的,但还有一个特殊的文件,经常用到的目录,它是如何保存的呢

基于Linux 一切切皆文件的设计思想,目录其实也是个文件,你甚至可以通过vim打开它,它也有inode, inode 里面也是指向一些块。

和普通文件不同的是, 普通文件的块里面保存的是文件数据,而目录文件的块里面保存的是目录里面一项一项的文件信息 。

在目录文件的块中,最简单的保存格式就是 列表 ,就是一项一项地将目录下的文件信息(如文件名、文件inode文件类型等)列在表里。

列表中每一项就代表该目录下的文件的文件名和对应的inode,通过这个inode,就可以找到真正的文件。

通常,第一项是「则」,表示当前目录,第二项是,表示上一级目录, 接下来就是一项一项的文件名和inode。

如果一个目录有超级多的文件,我们要想在这个目录下找文件,按照列表一项一项的找,效率就不高了。

于是,保存目录的格式改成 哈希表 ,对文件名进行哈希计算,把哈希值保存起来,如果我们要查找一个目录下面的文件名,可以通过名称取哈希。如果哈希能够匹配上,就说明这个文件的信息在相应的块里面。

Linux系统的ext文件系统就是采用了哈希表,来保存目录的内容,这种方法的优点是查找非常迅速,插入和删除也较简单,不过需要一些预备措施来避免哈希冲突。

目录查询是通过在磁盘上反复搜索完成,需要不断地进行/0 *** 作,开销较大。所以,为了减少/0 *** 作,把当前使用的文件目录缓存在内存,以后要使用该文件时只要在内存中 *** 作,从而降低了磁盘 *** 作次数,提高了文件系统的访问速度。

感谢您的阅读,希望您能摄取到知识!加油!冲冲冲!(发现光,追随光,成为光,散发光!)我是程序员耶耶!有缘再见。<-biubiu-⊂(`ω´∩)

“网络极客”,全新视角、全新思路,伴你遨游神奇的网络世界。

使用电脑双屏显示已经十分普及,并不一定只有**里面可以看到。

笔记本通过显示器输出、电脑通过投影输出、单个主机通过两台显示输出,均属于双屏显示。

当然,双频显示可以极大的提高工作效率。

那么,我们一起来看看如何实现双屏输出呢?

所需设备

主机显卡

显示器接口

连接线缆

双屏输出

双屏显示神器

具体的品牌和型号就不介绍了,避免广告嫌疑。

关于显示器双屏输出,大家还有那些问题和建议?

蟹妖~~

在开发的时候,一台电脑装两个显示屏还是挺方便的。可以分成多种情况:

笔记本+扩展显示器

开发人员配置笔记本已经是常态了,笔记本轻便易携带,办公室没做完的事情,可以带回去,晚上夜深人静时,灵感泉涌,一下子就解决了。也方便拿给客户去演示、讲解。

但笔记本屏幕一般不大,13寸的是便携、15寸的是主流、更大的 游戏 本就厚重不方便带了。编程时,为了显示更多的内容,字体一般不会太大,密密麻麻的的字挤在一个屏幕上,比较伤眼睛。

这时候,将笔记本连接到一台大屏幕的液晶显示器上,就又方便编程,又方便日常携带了,笔者也是这样配置的。

双显示器

如果是台式机,在主显示器外增加一个扩展显示器也是不错的补充。

这样就可以一个显示器上编程,另一个显示器上打开一些辅助的设计资料,或者搜索引擎、书籍。视线左右移动即可看到想要的内容,不必频繁的最小化和切换窗口。

多台显示器

对于某些特殊领域的玩家,比如金融类的、媒体类的,就可能需要多台显示器来辅助工作了,以便在不同的屏幕上跟踪不同的信息

你需要多少个显示屏呢?跟我们大家分享下吧~~

用一台电脑,可以同时做两件事情,当然是节省了时间,又提高了效率了。使用电脑双显示屏显示在现在已经是很普遍了,不仅仅是程序员,在很多很多生活场景中都可以用到,譬如,工作,学习, 娱乐 。那么下面我们来说一说它的优点:

极大提高工作效率

一台电脑, 两个显示器可以同时做任务过程中需要的环节,和手机的分屏功能有所相像 ,用来工作,就拿题中的程序员来说,一 个显示器用来敲代码,一个显示器就可以用来看效果。 用来学习,在画图纸时候,可以对应着设计图,在另一个屏幕上 *** 作,简单直观。用来 娱乐 ,一个显示器用来看**,一个用来聊天。各个方面都提高了效率,能够做更多的事情。

提高整体的观感效果

一个笔记本或者电脑的屏幕不够大,在工作或者是学习的时候,密密麻麻的字体或者是代码拥挤在一起,很大的影响了工作的或是学习的效率,对用户的眼睛同时也造成了一定的伤害。而这时候,一台电脑双屏显示就起到了很重要的作用, 使用一个更大屏幕的显示器,将密密麻麻的任务放到大屏幕上,既方便进行工作或学习,又方便进行编辑。 或是在进行看** 娱乐 的时候,屏幕太小影响观感,双屏显示,投放到大屏,整体的观感和使用效果就提高了。

这个年代,干过程序员的应该都体验过双屏显示吧,并不只是**里才会有,如果说该没见过程序员用双屏,那实在是太 out 了。使用双屏的好处实在不要太明显,主要优点如下:

双屏对撸,极大提高效率

一般程序员工作时需要打开的工具很多,文档,IDE,浏览器,调试工具等等,而且基本上都是一直在这几个界面之间切换,单屏的话一次一般显示一个界面,就需要频繁的切换,试想一下一边从运行结果中找出特定 log 信息,一边要从代码中找到原因,来回对比切换是不是很费事?甚至刚切出来,诶,刚才看到的是哪一条输出信息来着?又需要切回去,相信用着单屏的同学都有过这种体验,尤其是加班长了之后,更是让人心力交瘁。不得不说实在影响效率,这个时候来一个显示器就完全解决了,一个放着调试信息,一个放着代码,对着看就能更容易准确地找出问题根源以解决当前 bug,投入下一个功能逻辑的实现。所以对于程序员,完全可以这么说,加上一个显示器就能使工作效率提高了30%,思路不会被打断,减少大量的切换 *** 作,效率提升嗖嗖嗖。

充分利用可视范围

一般程序员干活的时候都是眼睛长时间盯着屏幕,如若不是需要工作交互一下(美工妹子),可能长久都不会移开视线,动作僵直,所以很多人都会有感觉脖子酸痛,能让你保持左右摇摆,或多或少缓解一下。而一般人正坐时眼前的一大片都是可见的,合理用上这些可视范围,同时捕获更多的视觉信息提升效率。

除此之外,还有什么理由呢,zhuangBi 啊,程序员本身就是一种很极客范的工种,加上一个显示器不是将这种极客范的帅气扩充到最大么,就算写下来一堆 bug,也要认认真真把这个逼装得彻底不是么。逃

不请自来!

实现条件

1、硬件

2、软件设置

实用功能

1、程序员用双屏,也是因人而异。

2、论文写作人员,可以一个屏查询资料,另外一个屏创作,这样不会把资料和创作文件搞混,复制,粘贴,方便。

3、证券交易是用双屏的普遍用户,一个屏幕可以看大盘情况,另外一个看个股分时,委托交易。这样可以抓到实时股价,间断性的在高点抛出或者低点吸入。其实,证券交易所用的不止两屏,而是许多屏,一般是用分屏器扩展。

4、财务人员如果代理公司较多,一个屏幕可以用一个网银付款,领外一个屏幕可以用另外一家银行的网银付款,不用来回切换银行。

5、家里如果电脑配置不错,可以一个屏幕浏览网页,另外一个屏幕看视频,互不影响。

延伸

所以,只要工作需要, 健康 需要,给员工提供双屏,是创造公司价值,关怀员工 健康 的亮点。

电脑用2个显示器这个很正常,有很多时候,我们在做一些工作时,需要同时展显多个画面,如数据分析对比,炒票外汇,编程等。这样一个显示器是不太方便的,而且严重影响工作效率,所以配多一个显示器或多个显示器是很有必要的。

上图这个是6屏显示,这也是我帮一位粉丝刚配的,不过显示器是它自己架好的。以他个人来说,他主要就是用来炒外汇的,但他也需要设计的同时看**或看股票行情等。正因为有需要,才会有价值。

它的优点就是更方便的工作,适合一个显示器无法满足需求的用户群体。不过这类显卡也不是正常的显卡,需要用到一些特别的显卡,也可以叫做分屏显卡。

希望我的回答对你有所帮助。

首先说这个不只是**里的,日常办公中都很常见了

另外也不只是程序员用,普通的文职人员也很适用。

说优点之前,首先说功能,功能说出来了你就可以很清楚的理解优点了。

我从功能和应用场景分类说说,当然对于专业人士就不用看了,不是什么知识,就是使用场景。

附上我自己家的两个显示屏示意供参考。

1,延展屏幕 - 显示一个程序界面,拉宽显示区域

应用场景:

单个软件界面太大,一个显示器显示不全,或者软件特别复杂,按钮啊菜单啊特别多,导致一个显示器显示出来可编辑的区域占比太小。

当然这里我想说的一般程序员更喜欢把两个显示器设置一个正常摆放,一个竖直摆放,竖直摆放的屏幕用来做编程窗口。因为编程代码一行不长,但是成千上万行,不竖直放有时候一个函数都显示不全。

比如就像你说的程序员用两个显示器,这样可以把窗口拉长至两个宽度,可视区域增加,方便工作。

比如做3Dcad设计的用两个屏幕延伸也很方便。

比如做视频音频剪辑的,往往时间轴很长,用两个显示器延伸方便,不然老是拖动滚动条烦。

2,延展(扩展)屏幕 - 同时显示两个不同的软件界面

应用场景:

这个是最常用的方式,一个电脑同时可以运行好多程序,但是一个显示器只能最大化显示一个界面,多个程序老是切换来切换去,烦!有了两个显示器你就可以同时显示两个完全不同的界面,非常方便。

比如你一个屏幕聊天,一个屏幕看**

比如你一个屏幕聊天,一个屏幕工作

比如你一个屏幕看邮件,一个屏幕处理工作文件

比如你两个屏幕同时打开不同的excel表,进行比对

等等。。。。

3,复制屏幕 - 两个显示器显示同样的内容

应用场景:

咋一看这个没有任何意义嘛,都一样了我还要另外一个干嘛。其实也有很多场合需要。

比如老板或领导有这个需求,老板坐在办公桌上,你去汇报或者他给你安排工作,需要看电脑的东西,你肯定是坐在你老板的对面,那怎么看到屏幕?你站在他身后才行。有两个屏幕复制显示,你和你老板就可以面对面谈事并且都能看到屏幕。

比如柜台,客户和柜员都要看屏幕,两个显示器就有意义了

以上是三种常用的情况。

还有些是多屏幕拼接,比如4块屏幕或者8块或者16块等,通常是指挥中心啊或者监控用,就是同时显示不同内容或者每个屏幕显示一小块,最后行成一个大的显示内容,就像是拼图。

最后说一下家用或者帮公司怎么装两个屏幕呢。

a),如果你是笔记本,那么只要找一个显示器即可

如果你的笔记本有VGA口,显示器也有,那就直接用线联上

如果你的笔记本有HDMI,显示器也有HDMI,同样直接联上

如果你的比较本有HDMI,显示器只有VGA,那要买个转换接头,几十块。

b),如果你是台式机,每个人的情况不同

如果主板集成显卡,没独立显卡,要看主板有没有提供两个显示器接口,一般最新的主板都会同时提供VGA和HDMI,如果没有两个口就要装个显卡喽。。

如果主板没集成显卡,只有独立显卡,同上检查是否有两个口。一般很老的独立显卡不一定提供两个口,计算提供了有可能一个是DVI,一个是VGA。DVI现在不太流行了,被HDMI替代了,要看显示器。。。

c),连接好了,就在桌面右键(不同系统设置方式略有不同,都很容易找到)显示设置,系统会自动识别两个显示器,一个是主。然后按照我上面说的模式选择你想用的方式就行了。

当然笔记本也可以直接用键盘投影显示快捷键。每个型号快捷键的位置不同,自己试试。

其实不止程序员,对于很多职业来说,一台计算机接两个显示器甚至比使用两台计算机都好。 

1用两个显示器比一个显示器多一倍的显示空间,看的东西多,不用频繁切换窗口,并且可以并行处理不同任务。

证券交易员就不用说了,他们往往就是几个显示器放在一起,看不同的信息(也许是两台计算机各接两台显示器)。你让他在一个屏幕里面缩小来看或者切换来看,当然也行,但是如果他们试过用多个屏幕之后,也许就不会再只使用一个了。 

对软件开发人员来说也非常实用。有些程序员是用两台计算机来工作的,但两台计算机的成本比一台计算机带两个显示器贵很多之外,两台计算机在工作的时候两台机器里面的文件同步、传输、共享之间的处理是很麻烦,一台计算机就没有这个问题了。软件开发人员用一个屏幕看文档用一个屏幕写程序是很实在的场景。

回到家里用两个显示器的时候也有,比如夫妻俩一个想看**一个想上网那就是用两个屏幕来实现,两个都不误。甚至一个人的时候也可以一边看**一边处理其他事情,和别人一边看电视一边打毛衣是一个效果。

2、现在的笔记本计算机通常除了本身显示器外都带多一个视频输出;

对台式机来说,有些台式机也带有两个显示器接口。将另外一个显示器接在平时没有用到的视频输出接口上,开机,打开控制面板的显示属性,选设置,选择第二台显示器,然后选中"将windows桌面扩展到该监视器上",即可。两台显示器并排在一起,类似宽屏。鼠标可以从这边移动到那边去,选中一个程序将它拖到某个屏幕中,然后最大化就可以使用了。 

3、对于某些场景是要求两个屏幕非常独立的情况。

如果机器性能够强,可以考虑两个屏幕各运行一个虚拟机(VMWARE虚拟机要注意禁止剪贴板共享,不然可能存在泄密)--这样相当于多了两台计算机。

怎么样,是不是多一个显示器很方便。无论用计算机来工作学习 娱乐 ,多一个显示器都是一个不错的方案。

我自己就是一台电脑两个显示器。所学专业是计算机网络,自考了程序员,一毕业却是做影视传媒的工作,接触到的电视台视频剪辑人员和动漫影视公司的设计人员基本上都是一台电脑接多个显示的,这样更方便预览提高工作效率。

现在主要是做数据转换的工作,两个显示器可以对两个软件的数据进行对比是否转换正确,界面不用切换来切换去,很方便,工作效率肯定是更高的。

有时也客串帮公司商务部的人员做做标书,两个显示器分屏显示招标公司的招标要求文档和自己需要制作的标书,结果他们商务部的文员看到了我这样比她们一个显示器方便太多都申请用两个显示器了。

所以,优点就是分屏显示预览和编辑十分便捷,更能提高工作效率。

我一哥们做医学影像的(虽然我是麻醉师),有一次交流发现,我手术室用两屏(一个监控,一个写手术过程),他搞出了四块屏,还是两横两竖,,,2个看片,一个截片,一个写报告,,,,,而且我们用6700k 8g wx4100,他们用26602,64g,双路VEGA,,,差距啊

准系统也是主机的一种,主机是指除了显示器、键鼠、音箱等外设之外,机箱中所包含的一切硬件统称为主机。面准系统是比较高档的主机,通常有专用的主板,可以同时安装两个或以上处理器及多个显卡,硬件规格可以相当高端

如下:

一、电脑的组成部分:

(一)软件系统:

软件系统包括: *** 作系统、应用软件等。

(二)硬件系统:

硬件系统包括:机箱(电源、硬盘、磁盘、 内存、主板、CPU-中央处理器、CPU风扇、光驱、声卡、网卡、显卡)、显示器、UPS(不间断电源供应系统)、键盘、鼠标等等(另可配有耳机、麦克风、音箱、打印机、摄像头等)。

家用电脑一般主板都有板载声卡、网卡,部分主板装有集成显卡。

1、CPU:

CPU的英文全称是"Central Processor Unit",翻译成中文就是“中央处理器单元”,它一条一条镀金的材料做的。它在PC机中的作用可以说相当于大脑在人体中的作用。所有的电脑程序都是由它来运行的。

2、主机:

主机一般将放置在机箱中的电脑部件总称为"主机"。它是电脑的最主要组成部分,主板、CPU和硬盘等主要部件均在主机内。

3、内存:

内存与磁盘等外部存储器相比较,内存是指CPU可以直接读取的内部存储器,主要是以芯片的形式出现。内存又叫做“主存储器”,简称"主存"。

一般见到的内存芯片是条状的,也叫"内存条",它需要 插在主板上的内存槽中才能工作。还有一种内存叫作"高速缓存",英文名是"Cache",一般已经内置在CPU中或者主板上。

一般说一台机器的内存有多少兆,主要是指内存条的容量。可以在电脑刚开始启动时的画面中看到内存的容量显示,也可以在DOS系统中使用命令来查看内存容量,还可以在Windows系统中查看系统资源看到内存容量。

4、显示卡:

显示卡是连接显示器和PC机主板的重要元件。它是插在主板上的扩展槽里的。它 主要负责把主机向显示器发出的显示信号转化为一般电信号,使得显示器能明白PC 机在让它干什么。

显示卡上也有存储器,叫做"显示内存",它的多少将直接影响显示器的显示效果,比如清晰程度和色彩丰富程度等等。

5、显示器:

显示器是电脑的输出设备之一,早期的显示器外形与电视机相似都是显像管的,即CRT显示器。现在的显示器大多是LCD或LED的。

二、电脑键盘 *** 作基础知识:

电脑键盘上一般功能(Fuction)键,所以功能键就定义为F,一共有12个,通常被称为F键,其位置一般是在键盘顶部,从F1到F12。

1、F1: 如果你处在一个选定的程序中而需要帮助,那么请按下F1。如果现在不是处在任何程序中,而是处在资源管理器或桌面,那么按下F1就会出现Windows的帮助程序。如果你正在对某个程序进行 *** 作,而想得到Windows帮助,则需要按下Win+F1。按下Shift+F1,会出现"What's This"的帮助信息。

2、F2:如果在资源管理器中选定了一个文件或文件夹,按下F2则会对这个选定的文件或文件夹重命名。

3、F3:在资源管理器或桌面上按下F3,则会出现"搜索文件"的窗口,因此如果想对某个文件夹中的文件进行搜索,那么直接按下F3键就能快速打开搜索窗口,并且搜索范围已经默认设置为该文件夹。同样,在Windows Media Player中按下它,会出现"通过搜索计算机添加到媒体库"的窗口。

4、F4:这个键用来打开IE中的地址栏列表,要关闭IE窗口,可以用Alt+F4组合键。

5、F5:用来刷新IE或资源管理器中当前所在窗口的内容。

6、F6:可以快速在资源管理器及IE中定位到地址栏。

7、F7:在Windows中没有任何作用。

8、F8:在启动电脑时,可以用它来显示启动菜单。有些电脑还可以在电脑启动最初按下这个键来快速调出启动设置菜单,从中可以快速选择是软盘启动,还是光盘启动,或者直接用硬盘启动,不必费事进入BIOS进行启动顺序的修改。另外,还可以在安装Windows时接受微软的安装协议。

9、F9:在Windows中同样没有任何作用。但在Windows Media Player中可以用来快速降低音量。

10、F10:用来激活Windows或程序中的菜单,按下Shift+F10会出现右键快捷菜单。和键盘中Application键的作用是相同的。而在Windows Media Player中,它的功能是提高音量。

11、F11:可以使当前的资源管理器或IE变为全屏显示。

12、F12:在Windows中同样没有任何作用。但在Word中,按下它会快速d出另存为文件的窗口。

在现在的轻薄大屏本中,有一类产品比较引人注意,那就是“程序员笔记本”,甚至有些产品命名就非常直接,比如机械革命的Code10,看了这名字感觉干脆就直接叫码农10算了。这类笔记本看起来配置非常高而且拥有了轻薄属性,那对于普通消费者来说这类产品值得购买吗?如果直接给出结论似乎不那么有说服力,不妨对比两款产品,看看它和普通的轻薄大屏本有啥不同。

这次对比的两款机型都是16英寸规格,而且都来自同一个品牌。一个叫做机械革命F6,是一款普通的轻薄大屏笔记本,重15Kg;另一款就是“程序员笔记本”,机械革命Code10,重16Kg。从规格上说,程序员笔记本胜出非常多,因为有更高规格的CPU,更先进的接口,当然价格也要更贵一些。那如果直接按照配置选择这款笔记本,会带来怎样的使用体验呢?

从硬件配置上来说,如果光看CPU性能,确实是机械革命Code10更强一些,毕竟一个是酷睿i5,另一个是酷睿i7。除去频率差异之外,最直接的就是一个四核8线程、一个八核16线程,这简直是碾压。其他方面两者也差不多,看起来似乎Code10各方面更好一点,比如有2个雷电4,有触摸板小键盘等等,但这不代表它的使用体验就一定会好。

酷睿i5-11320H和酷睿i7-11800H的一个重要差异,其实是核显规格,酷睿i5虽然CPU性能弱,但核显规格更高。两者是96EU和32EU的差距,也就是说机械革命Code10的GPU性能只有前者的三分之一。那96EU在笔记本中是什么级别呢?它不但能办公,而且能给剪视频这类工作加速,更重要的是96EU是能玩3D游戏的,32EU就基本只能扫雷和斗地主了。

这两款本其他方面都差不多,都采用了非常哟意思的侧边电源设计,可以直接连接显示器键鼠,让笔记本当PC主机,不用开盖就能开机。内部构造也是看了一款就等于看了两款,电池都是70Wh,接口布局也几乎一模一样,区别只是热管风扇规格稍有不同,可能也正是如此才导致了100克的体重差。两款本的接口规格略有差异,但这些区别都不足以影响选购,核显规格上的差异彻底决定了你这款笔记本能做什么, 以及没法做什么。

而对于一些诸如写代码之类的开发环境来说,多核心可能就比更强的显卡更重要。尤其是如果运行虚拟机或者需要调用多个核心的话,酷睿i7-11800H表现必定优于酷睿i5-11320H。但对于普通用户来说,我们日常办公、追剧、玩游戏等一些需求,不管工作还是娱乐,好的GPU都是必不可少的,显然机械革命F6更适合大众消费者。

程序员属于软考初级资格考试,软考程序员考试包含两个科目:基础知识与应用技术,各科目考试内容有所不同,考试需要在一次考试中各科目都及格才算合格。

程序员属于软考初级资格考试,根据程序员考试大纲,各科目考试内容如下:

考试科目1:计算机与软件工程基本知识

1计算机科学基础

11数制及其转换

二进制、十进制和十六进制等常用数制及其相互转换

12数据的表示

数的表示

非数值数据的表示

13算术运算和逻辑运算

计算机中二进制数的运算方法

逻辑代数的基本运算

14数学应用

常用数值计算(矩阵、近似求解、插值)

排列组合、应用统计

编码基础

15常用数据结构

数组

线性表及链表

队列、栈

16常用算法

算法与数据结构的关系

算法设计和算法描述

常用的排序算法

查找算法

常用的数值计算方法

字符串处理算法

递归算法

最小生成树、拓扑排序和单源点最短路径求解算法

2计算机系统基础知识

21硬件基础知识

211计算机的类型和特点

微机(PC机)、工作站、服务器、主机、大型计算机、巨型计算机、并行机

212中央处理器CPU

CPU的组成

常用的寄存器

指令系统,寻址方式

令执行控制、中断控制、处理机性能

213主存和辅存

存储介质

高速缓存(Cache)、主存

辅存设备

214I/O接口、I/O设备和通信设备

I/O接口

I/O设备(类型、特性)

通信设备(类型、特性)

I/O设备、通信设备的连接方法和连接介质类型

22软件基础知识

221 *** 作系统基础知识

*** 作系统的类型和功能

处理机管理

存储管理

设备管理

文件管理

作业管理(作业调度算法)

图形用户界面和 *** 作方法

222程序设计语言和语言处理程序的基础知识

语言翻译基础知识(汇编、编译、解释)

程序设计语言的基本成分:数据、运算、控制和传输

程序语言类型和特点

23网络基础知识

网络的功能、分类、组成和拓扑结构

基本的网络协议与标准

常用网络设备与网络通信设备,网络 *** 作系统基础知识

Client/Server结构、Browser/Server结构

局域网(LAN)基础知识

Internet基础知识

24数据库基础知识

数据库管理系统的主要功能和特征

数据库模式(概念模式、外模式、内模式)

数据模型、ER图

数据 *** 作(关系运算)

数据库语言(SQL)

数据库的主要控制功能(并发控制、安全控制)

25多媒体基础知识

多媒体基本知识

常用多媒体设备性能特征,常用多媒体文件格式类型

26系统性能指标

响应时间、吞吐量、周转时间

可靠性、可维护性、可扩充性、可移植性、可用性、可重用性、安全性

27计算机应用基础知识

计算机常用办公软件 *** 作方法

计算机信息管理、数据处理、辅助设计、自动控制、科学计算、人工智能等领域的应用

远程通信服务

3系统开发和运行知识

31软件工程和项目管理基础知识

软件工程基础知识

软件开发生命周期各阶段的目标和任务

软件过程基本知识

软件开发项目管理基本知识

软件开发方法(原型法、面向对象方法)基础知识

软件开发工具与环境基础知识(CASE)

软件质量管理基础知识

32系统分析设计基础知识

数据流图(DFD)、实体联系图(ER图)基本知识

面向对象设计、以过程为中心设计、以数据为中心设计基础知识

结构化分析和设计方法

模块设计、代码设计、人机界面设计基础知识

33程序设计基础知识

结构化程序设计、流程图、NS图、PAD图

程序设计风格

34程序测试基础知识

程序测试的目的、原则、对象、过程与工具

黑盒测试、白盒测试方法

测试设计和管理

35程序设计文档基础知识

算法的描述、程度逻辑的描述、程度规格说明书

模块测试计划、模块测试用例、模块测试报告

36系统运行和维护基础知识

系统运行管理基础知识

系统维护基础知识

4信息安全基础知识

信息系统安全基础知识

信息系统安全管理

加密与解密基础知识

5标准化基础知识

标准化基本概念

标准的层次(国际标准、标准、行业标准、企业标准)

相关标准(代码标准、文件格式标准、安全标准、软件开发规范和文档标准、互联网相关标准)

6信息化基础知识

信息、信息资源、信息化、信息工程、信息产业、信息技术的含义

全球信息化趋势、信息化战略、企业信息化战略和策略常识

有关的法律、法规要点

7计算机专业英语

具有助理工程师(或技术员)英语阅读水平

掌握本领域的英语基本术语

考试科目2:程序设计

1内部设计

11理解外部设计

12软件功能划分和确定结构

数据流图(DFD)、结构图

13物理数据设计

确定数据组织方式、存储介质、设计记录格式,处理方式

14详细输入输出设计

界面设计、报表设计等

15内部设计文档

程序接口、程序功能、人机界面、输入输出、测试计划

16内部设计评审

2程序设计

21模块划分(原则、方法、标准)

22编写程序设计文档

模块规格说明书(程序处理逻辑、输入输出数据格式)

测试要求说明书(测试类型和目标、测试用例、测试方法)

23程序设计评审

3程序实现

31编程

编程方法和规范

程序设计语言的选择和使用

人工走查

程序文档化

32程序测试

测试环境和测试工具的选择和使用

测试数据的设计

测试报告的编写

4程序设计语言(C语言为必选,再在C、C++、Java语言中任选一种)

41C程序设计语言(C99标准)

42C++程序设计语言(ANSIC++标准)

43Java程序设计语言(Java2)

温馨提示:因考试政策、内容不断变化与调整,猎考网提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!

下方免费复习资料内容介绍:2021上半年系统集成项目管理工程师上午真题及答案解析

格式:PDF大小:58188KB 2022下半年系统集成项目管理工程师考前20问

格式:DO大小:3425KB

资格考试有疑问、不知道如何总结考点内容、不清楚报考考试当地政策,点击底部咨询猎考网,免费领取复习资料

现在目前的情况下,迷你电脑主机还是支持玩中小型游戏

玩英雄联盟的话,迷你电脑主机可以降低到最低配置玩游戏

京东众筹的迷你电脑主机品牌ZXK的配置、价格还有性价比

你可以了解它

以上就是关于程序员必备知识( *** 作系统5-文件系统)全部的内容,包括:程序员必备知识( *** 作系统5-文件系统)、电影里看到程序员一台电脑装2个显示屏,这样有什么优点、准系统与主机有什么区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9476995.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存