今天是加入生信星球学习的第2天,昨天晚上开组会给我开崩溃了,真的设计不出实验方案啊啊啊,但不管怎么样,今天要元气满满地学好今天的内容
1、字符设备驱动: 当我们的应用层读写(read()/write())字符设备驱动时,是按字节/字符来读写数据的,期间没有任何缓存区,因为数据量小,不能随机读取数据,例如:按键、LED、鼠标、键盘等 2、块设备: 块设备是i/o设备中的一类, 当我们的应用层对该设备读写时,是按扇区大小来读写数据的,若读写的数据小于扇区的大小,就会需要缓存区, 可以随机读写设备的任意位置处的数据,例如 普通文件(.txt,.c等),硬盘,U盘,SD卡。 3、块设备结构: 段(Segments):由若干个块组成。是Linux内存管理机制中一个内存页或者内存页的一部分。 块 (Blocks): 由Linux制定对内核或文件系统等数据处理的基本单位。通常由1个或多个扇区组成。(对Linux操作系统而言) 扇区(Sectors):块设备的基本单位。通常在512字节到32768字节之间,默认512字节 应用程序进行文件的读写,通过文件系统将文件的读写转换为块设备驱动操作硬件。
Conda是一个开源的软件包管理系统和环境管理系统,主要用于Python程序,但也可以用于其他编程语言。它能够跨平台运行,支持多种操作系统,如Linux、OS X和Windows。Conda主要用于安装和管理软件包及其依赖关系,可以在不同环境中轻松切换,使得软件包的安装和管理更加方便。
在计算机的世界里,我们可以将业务进行抽象简化为两种场景——计算密集型和IO密集型。这两种场景下的表现,决定这一个计算机系统的能力。数据库作为一个典型的基础软件,它的所有业务逻辑同样可以抽象为这两种场景的混合。因此,一个数据库系统性能的强悍与否,往往跟操作系统和硬件提供的计算能力、IO能力紧密相关。
4,Linux不分各种磁盘,文件系统呈现树状,系统目录无法使用,主要可用的是home文件夹
Block Layer层在整个I/O中负责承上启下,上接文件系统,下接块驱动。 我不想直接讨论代码,希望从一个架构的演变来初探一下Block Layer层。
我们在安装完conda后,自动会创建一个名为base的基础环境,后面的*号说明我们目前处在这个环境中。
redis.conf中的appendfysnc是对redis性能有重要影响的参数之一。可取三种值:always、everysec和no。
之后会出现more,是还有更多,让enter翻页的意思,持续按enter,第一个enter下来是空白行,不要担心继续往下按,直到出现
``` R pwd #显示当前路径 bio02@ecm-cefa:~$ pwd /home/bio02 mkdir #创建目录 bio02@ecm-cefa:~$ mkdir hello ls #显示列表 bio02@ecm-cefa:~$ ls biosoft hello project src tmp #除了四个已有目录,新增一个hello目录 rm #删文件 rmdir #删空目录 rm -r #删非空目录(删除统一展示了,如下,因为不会随意切换目录,导致删除要挨个进入目录删) bio02@ecm-cefa:~$ rm -r tmp bio02@ecm-cefa:~$ mkdir tmp bio02@ecm-cefa:~$ cd tmp bio02@ecm-cefa:~/tmp$ mkdir rm_test bio02@ecm-cefa:~/tmp$ cd rm_test bio02@ecm-cefa:~/tmp/rm_test$ mkdir huahua bio02@ecm-cefa:~/tmp/rm_test$ cd huahua bio02@ecm-cefa:~/tmp/rm_test/huahua$ touch doodle.txt bio02@ecm-cefa:~/tmp/rm_test/huahua$ rm doodle.txt bio02@ecm-cefa:~/tmp/rm_test/huahua$ cd bio02@ecm-cefa:~$ cd tmp bio02@ecm-cefa:~/tmp$ cd rm_test bio02@ecm-cefa:~/tmp/rm_test$ rmdir huahua bio02@ecm-cefa:~/tmp/rm_test$ cd bio02@ecm-cefa:~$ cd tmp bio02@ecm-cefa:~/tmp$ rmdir rm_test bio02@ecm-cefa:~/tmp$ cd #进入目录 bio02@ecm-cefa:~$ cd tmp vi #建脚本或文档 bio02@ecm-cefa:~/tmp/new$ vi hello_world.txt cat #查看文档并展示到屏幕 bio02@ecm-cefa:~/tmp/new$ cat hello_world.txt i today is a good day,i meet my boyfriend,he is older than me,he finished his work then meet me.we have a good time. head #输出前十行(然而我只发挥了一行) bio02@ecm-cefa:~/tmp/new$ head hello_world.txt i today is a good day,i meet my boyfriend,he is older than me,he finished his work then meet me.we have a good time. tail #输出后十行(如上括号所言) bio02@ecm-cefa:~/tmp/new$ tail hello_world.txt i today is a good day,i meet my boyfriend,he is older than me,he finished his work then meet me.we have a good time. head -n #数字 自定义输出几行 bio02@ecm-cefa:~/tmp/new$ head -n 2 hello_world.txt i today is a good day,i meet my boyfriend,he is older than me,he finished his work then meet me.we have a good time. cp #复制 bio02@ecm-cefa:~/tmp/new$ cp hello_world.txt hello_boy mv #移动 bio02@ecm-cefa:~/tmp/new$ mv hello_world.txt tmp bio02@ecm-cefa:~/tmp/new$ ```
conda create -n rna-seq python=3 fastqc trimmomatic -y
学习生信的过程中怎么能少了Linux呢。但是很多人都是Linux新手,又不想花钱买服务器,这里有个免费的网页版Linux服务(链接在文末),足够学习基础的Linux命令!
进入网址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/
linux是操作系统(OS),类似于Windows和mac,吉祥物是一只叫Tux的小企鹅
Linux是一个操作系统,类似于MacOS和Windows。优点是开源、免费、安全、稳定。Linux系统在生信领域中非常重要。
学习任何东西之前都得知道他是为什么而产生的。任何一个设计,或技术。都是为了解决某个或多个问题而产生的。即BIO到NIO到多路复用再到epollo 再到netty网络编程框架。今天我们来看看这个演进的过程。
PS:NIO就是用最少的线程干最多的事情,BIO是找更多的人来干。都是要进行堵塞的,尤其是selector.select()方法上,跟bio的accept()一样,其实都在阻塞。比较单线程和多线程的处理方式,一般情况下无论哪种,nio模式都要比bio更优。
传统的机械硬盘一般为3.5英寸硬盘,并由多个圆形蝶片组成,每个蝶片拥有独立的机械臂和磁头,每个堞片的圆形平面被划分了不同的同心圆,每一个同心圆称为一个磁道,位于最外面的道的周长最长称为外道,最里面的道称为内道,通常硬盘厂商会将圆形蝶片最靠里面的一些内道(速度较慢,影响性能)封装起来不用;道又被划分成不同的块单元称为扇区,每个道的周长不同,现代硬盘不同长度的道划分出来的扇区数也是不相同的,而磁头不工作的时候一般位于内道,如果追求响应时间,则数据可存储在硬盘的内道,如果追求大的吞吐量,则数据应存储在硬盘的外道;
按照ldd的说法,linux的设备驱动包括了char,block,net三种设备。char设备是比较简单的,只要分配了major、minor号,就可以进行读写处理了。相对而言,block和net要稍微复杂些。net设备姑且按下不谈,我们在以后的博文中会有涉及。今天,我们可以看看一个简单的block是怎么设计的。
tomcat6.0之前都是用的BIO,8.0是默认的BIO,传统的java IO来进行的其实就是socket。
研究IO也很久了,一直无法串联bio和块设备驱动,只知道bio经过IO调度算法传递到块设备驱动,怎么过去的,IO调度算法在哪里发挥作用,一直没有完全搞明白,查看了很多资料,终于对块设备驱动有所理解,也打通了bio到块设备。
本节目的: 通过分析块设备驱动的框架,知道如何来写驱动 1.之前我们学的都是字符设备驱动,先来回忆一下 字符设备驱动: 当我们的应用层读写(read()/write())字符设备驱动时,是按字
1.进入https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/
Netty作为高性能的网络通信框架,它是IO模型演变过程中的产物。Netty以Java NIO为基础,是一种基于异步事件驱动的网络通信应用框架,Netty用以快速开发高性能、高可靠的网络服务器和客户端程序,很多开源框架都选择Netty作为其网络通信模块。本文主要通过分析IO模型的优化演进之路,比较不同IO模型的异同,让大家对于Java IO模型有着更加深刻的理解,我想这也是Netty如何实现高性能网络通信理解的重要基础。话不多说,我们赶紧发车了。
2.看样子是 64 位的,然后去找miniconda for Linux 64的最新版本,顺利下载到了 biosoft 目录下
BIO (Blocking I/O) 是同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。
同步:程序从上往下执行 异步:程序从上往下执行会有多个分支共同执行(即开多个线程)。
找后缀.sh的点击并复制下载链接(一定要.sh而不是.exe,sh是脚本脚本的意思,我因为搞了个.exe一直错 笑哭)
网上关于BIO和块设备读写流程的文章何止千万,但是能够让你彻底读懂读明白的文章实在难找,可以说是越读越糊涂!
OpenSSL可以直接使用命令对文件件进行base64的编码与解码,利用OpenSSL提供的API同样可以做到这一点。
目的:安装64位最新版本(Miniconda3-py39_24.1.2-0-Linux-x86_64.sh)
应用场景:BIO 适合用于连接数比较小且固定的架构,这种方式对服务器资源要求比较高,但程序简单易理解。
按照学习要求练习了几个基本命令:pwd、mkdir、ls、rm、cd、vi、cat、cp、mv。
DAX: 磁盘(disk)的访问模式有三种 BUFFERED、DIRECT、DAX。前面提到的由于page cache存在可以避免耗时的磁盘通信就是BUFFERED访问模式的集中体现;但是如果我要求用户的write请求要实时存储到磁盘里,不能只在内存中更新,那么此时我便需要DIRECT模式;大家可能听说过flash分为两种nand flash和nor flash,nor flash可以像ram一样直接通过地址线和数据线访问,不需要整块整块的刷,对于这种场景我们采用DAX模式。所以file_operations的read_iter和write_iter回调函数首先就需要根据不同的标志判断采用哪种访问模式, kernel在2020年12月的patch中提出了folio的概念,我们可以把folio简单理解为一段连续内存,一个或多个page的集合
也叫 同步阻塞IO , 请求数据的进程需要一直阻塞等待读取完成才能返回,同时整个读取的动作也是要同步等待I/O操作的完成才返回。
从官网下载openssl源码和 libcurl源码。OpenSSL顺利交叉编译通过。
Bio-Linux是功能齐全的、强大的、可定制的、易于维护的生物分析工作站。Bio-Linux基于Ubuntu提供500多个生物分析程序,由一个图形化的菜单进行管理,能方便地访问到其生物分析文档系统及对测试程序有用的样本数据。用于处理新型序列数据类型的Bio-Linux软件包可额外安装。
最近一个项目做了一个模拟u盘的设备,但是在read虚拟u盘的内容时必须每次都从磁盘内读取,而不是从系统的cache中读取,由于这个问题,就查资料看了下read的系统调用,以及文件系统的一些内容。由于文件系统涉及面较广,例如虚拟文件系统(VFS),页缓存,块缓存,数据同步等内容,不可能全部分析到位,这里只记录和read有关的两种使用方式。cached IO和direct IO。 1. 什么是系统调用 首先系统调用能做那些事呢?概括来说,大概有下面这些事需要系统调用来实现。 控制硬件:系统调用往往作为硬件资源和
Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。程序员在使用这些 API 的时候,不需要关心操作系统层面的知识,也不需要根据不同操作系统编写不同的代码。只需要使用Java的API就可以了。
很多人说BIO不好,会“block”,但到底什么是IO的Block呢?考虑下面两种情况:
生物信息分析平台可以同时提供给多个用户使用,如果想要使用服务器,必须以一个用户的身份登录,现代操作系统一般属于多用户的操作系统,也就是说,同一台机器可以多个用户同时使用,一般这些用户都是为普通用户,这些普通用户能同时登录这台计算机,计算机对这些用户分配一定的资源,普通用户在所分配到的资源内进行各自的操作。因为是多用户操作,就需要进行用户管理,包括用户的创建删除,分组管理,权限设置,资源分配等。Linux系统中引入 root 用户来进行管理。一个系统只有一个 root 账户,此用户是唯一的,拥有系统的所有权限。这个 root 用户我们也叫做超级用户。使用 root 账户一定要小心,拥有 root密码就意味着拥有了这台计算机上所有用户的所有数据。
连接数高的情况下:阻塞 -> 耗资源、效率低。 阻塞意味着等待,等待就会一直占用该线程,当连接数高时,大多线程又在等待,就会耗尽系统的线程资源。
需求: 如何利用ISCSI协议保留字段, 在Initiator和Tgt端传递, 完成一些控制开关或其他管理功能 ?
关于Java BIO、NIO、AIO的区别和原理,这样的文章非常的多的,但主要还是在BIO和NIO这两者之间讨论,而关于AIO这样的文章就少之又少了,很多只是介绍了一下概念和代码示例。
块是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。 块设备是与字符设备并列的概念, 这两类设备在 Linux 中驱动的结构有较大差异,总体而言, 块设备驱动比字符设备驱动要复杂得多,在 I/O 操作上表现出极大的不同,缓冲、 I/O 调度、请求队列等都是与块设备驱动相关的概念。
领取专属 10元无门槛券
手把手带您无忧上云