在专栏之前的几篇文章中,我们总结了缓冲池,缓存页,redo log,undo log,以及数据页和数据行在底层是如何进行存储的,后续介绍了表空间,段,区等概念。这一节比较特殊,讲述的是和Linux有关的交互原理,因为多数的mysql都是部署在linux的服务器上面,本节会简单介绍一下linux是如何处理mysql的请求的,以及linux系统会带来哪些问题
桔妹导读:死锁是多线程和分布式程序中常见的一种严重问题。死锁是毁灭性的,一旦发生,系统很难或者几乎不可能恢复;死锁是随机的,只有满足特定条件才会发生,而如果条件复杂,虽然发生概率很低,但是一旦发生就非常难重现和调试。使用锁而产生的死锁是死锁中的一种常见情况。Linux 内核使用 Lockdep 工具来检测和特别是预测锁的死锁场景。然而,目前 Lockdep 只支持处理互斥锁,不支持更为复杂的读写锁,尤其是递归读锁(Recursive-read lock)。因此,Lockdep 既会出现由读写锁引起的假阳性预测错误,也会出现假阴性预测错误。
在 Linux 处理组学数据,硬盘真是经不起消耗的东西。而本地办公的电脑主要以开浏览器、看文献、交流、做PPT等为主,除了C盘小的时候容易炸,其他磁盘使用量很少。所以我最近遇到了工作站没法装大点的测序数据,但 PC 却有好几个盘上 T 的空闲。这篇文章就简单做个笔记,记录下如何将 Windows 的磁盘共享给 Linux 存数据使用。
IO的阻塞与同步 IO即输入/输出(Input/Output)。每个应用系统都少不了交互,或多或少都会产生数据,而它们的核心:IO,其性能的发展明显落后于 CPU 。对于高性能、高并发的应用系统来说,回避IO瓶颈进而提升性能是至关重要的。 阻塞与非阻塞 一般来说,IO模型可以分为阻塞/非阻塞及同步/异步。先从简单的阻塞/非阻塞模型说起。 阻塞IO:用户进程发起IO操作后,必须等待IO操作完成才能继续运行。通信协议中的 Socket 编程,为了简单起见,也使用的这种方式。但这种方式会造成CPU大量闲置,系
在RTOS中,本质也是去读写寄存器,但是需要有统一的驱动程序框架。 所以:RTOS驱动 = 驱动框架 + 硬件操作
Linux系统文件操作主要是通过块设备驱动来实现的。 块设备主要指的是用来存储数据的设备,类似于SD卡、U盘、Nor Flash、Nand Flash、机械硬盘和固态硬盘等。块设备驱动就是用来访问这些存储设备的,其与字符设备驱动不同的是:
在线课堂:https://www.100ask.net/index(课程观看) 论 坛:http://bbs.100ask.net/(学术答疑) 开 发 板:https://100ask.taobao.com/ (淘宝) https://weidongshan.tmall.com/(天猫)
上一篇我们讲了 Linux 系统的启动流程,本文讲解一下 Andorid 系统的启动流程。
哈哈,好久没有更新文章了;最近年底,确实忙了点,但是还是有小伙伴在私信问Linux和macOS的事情,有几个小伙伴还问开机挂载磁盘问题,这里做个简单解答。
:set (模式信息) :set nu — 显示行号 :set nonu — 取消行号 :set mouse=a — 设定鼠标可用 :set cursorline — 设定显示行线 :help — 查看帮助
相信今天很多的软件工程师使用的都是 Linux 或者 macOS 系统,与 Windows 不同,我们很难看到磁盘碎片整理这一概念,从个人的经验来看,作者在过去七八年没有在 macOS 中整理过磁盘的碎片,你在今天的磁盘工具中也找不到相关的操作,只能通过 diskutil 命令设置某一块磁盘是否开启或者关闭碎片整理。
随着现在新内核的EasyGBS、EasyNVR以及EasyCVR的使用场景越来越广泛,这些平台也被运用在大小不同的很多实际项目中。在功能上,基本都能满足大部分用户的需求,也有少部分项目需要进行功能的定制。
Docker的基础是Linux容器(LXC)等技术,(LXC系统提供工具来管理容器,具有先进的网络和存储支持,还有最小容器操作系统模版的广泛选择)。
如果你觉得这些问题都很简单,都能很明确的回答上来。那么很遗憾这篇文章不是为你准备的,你可以关掉网页去做其他更有意义的事情了。如果你觉得无法明确的回答这些问题,那么就耐心地读完这篇文章,相信不会浪费你的时间。受限于个人时间和文章篇幅,部分议题如果我不能给出更好的解释或者已有专业和严谨的资料,就只会给出相关的参考文献的链接,请读者自行参阅。
博主一直都很喜欢思考怎样管理装在自己电脑上的桌面系统,这篇算是前作能当主力,能入虚拟机,还能随时打包带走,Linux就是这么强大的后续探索吧。
写入速度使用命令:time dd if=/dev/zero of=/tmp/test.dat bs=1G count=1
https://segmentfault.com/a/1190000010895869
最近在学习 Zookeeper,在刚开始接触 Zookeeper 的时候,完全不知道 Zookeeper 有什么用。且很多资料都是将 Zookeeper 描述成一个“类 Unix/Linux 文件系统”的中间件,导致我很难将类 Unix/Linux 文件系统的 Zookeeper 和分布式应用联系在一起。后来在粗读了《ZooKeeper 分布式过程协同技术详解》和《从Paxos到Zookeeper 分布式一致性原理与实践》两本书,并动手写了一些 CURD demo 后,初步对 Zookeeper 有了一定的了解。不过比较肤浅,为了进一步加深对 Zookeeper 的认识,我利用空闲时间编写了本篇文章对应的 demo – 基于 Zookeeper 的分布式锁实现。通过编写这个分布式锁 demo,使我对 Zookeeper 的 watcher 机制、Zookeeper 的用途等有了更进一步的认识。不过我所编写的分布式锁还是比较简陋的,实现的也不够优美,仅仅是个练习,仅供参考使用。好了,题外话就说到这里,接下来我们就来聊聊基于 Zookeeper 的分布式锁实现。
Linux I/O(输入/输出)是操作系统中一个至关重要的组成部分,它涉及到数据在内存🧠、存储设备💾、网络接口🌐等之间的传输过程。在Linux中,I/O操作不仅仅是文件读写那么简单,它包括了一系列复杂的机制和策略,旨在提高数据处理的效率,保证系统的稳定性和性能。📊
---- 今天分享一下在linux系统在实现对文件读写一些基本的操作,在这之前我们要掌握一些基本的技能在Linux环境。比如查看命令和一个函数的具体用法,就是相当于查手册,在Linux下有一个man手册非常有用: man查询手册 man 1 +命令 这里的1表示为查询的是Linux命令 man 2 xxx 这里的2表示为查询的是linux api man 3 xxx 这里的3表示为查询的是c库函数 在了解了这个后我们就可以开始来实现标题说的操作了。 一、在linux环境下常用文件接口函数:open、close、write、read、lseek。 二、文件操作的基本步骤分为: a、在linux系统中要操作一个文件,一般是先open打开一个文件,得到一个文件扫描描述符,然后对文件进行读写操作(或其他操作),最后关闭文件即可。 b、对文件进行操作时,一定要先打开文件,然后再进行对文件操作(打开文件不成功的话,就操作不了),最后操作文件完毕后,一定要关闭文件,否则可能会造成文件损坏 c、文件平时是存放在块设备中的文件系统中的,我们把这个文件叫做静态文件,当我们去打开一个文件时,linux内核做的操作包括:内核在进程中建立了一个打开文件的数据结构, 记录下我们打开的这个文件,内核在内存中申请一段内存,并且将静态文件的内容从块设备中读取到内存中特定地址管理存放(叫动态文件) d、打开文件后,以后对这个文件的读写操作,都是针对内存中这一份动态文件的,而不是针对静态文件的。 当我们对动态文件进行读写后,此时内存中的动态文件和块设备中的静态文件就不同步了, 当我们close 关闭动态文件时,close内部内核将内存中的动态文件的内容去更新(同步)块设备中的静态文件。 三、为什么是这样操作? 以块设备本身有读写限制(回忆Nandflash、SD、等块设备的读写特征),本身对块设备进行操作非常不灵活。而内存可以按字节为单位来操作。而且进行随机操作。 四、文件描述符是什么? 1、文件描述符:它其实实质是一个数字,这个数字在一个进程中表示一个特定的含义,当我们open打开一个文件时,操作系统在内存中构建了一些数据结构来表示这个动态文件,然后返回给应用程序一个数字作为文件描述符,这个数字就和我们内存中维护这个动态文件的这些数据结构挂钩绑定上了。以后我们应用程序如果要操作这一个动态文件,只需要用这个文件描述符进行区分。简单来说,它是来区分多个文件的(在打开多个文件的时候)。 2、文件描述的作用域就是当前的进程,出了这个当前进程,这个文件描述符就没有意义了。 五、代码实现: 1、打开文件:
Linux系统内核是C语言编写的,所以,Linux系统开发可能会和很多系统API打交道,需要掌握C语言基础,C语言是Linux最基础的开发语言,当然也可以用C++。一般做与系统交互的模块时,用C语言多一些,做上层业务应用时,为了开发效率,会使用C++来开发,毕竟C++是面向对象的开发语言,适合大型项目的开发,方便模块化,代码复用率高。
1、Nginx 下如何正确的做日志切分 今天发现有个 Nginx 日志 rotation 出来大小是 0,很奇怪,按公司的业务场景来说,这是不可能的。 瞅了下前同事留下来的 rotation 脚本,看到了这么两行,也是他们当时 rotation 的方案: cp tracklog.ooxx.com.access.log ${log_date_dir}/tracklog.ooxx.com.access.log.${log_name_date} > tracklog.ooxx.com.access.log
默认情况下,容器中的进程以 root 用户权限运行,并且这个 root 用户和宿主机中的 root 是同一个用户。听起来是不是很可怕,因为这就意味着一旦容器中的进程有了适当的机会,它就可以控制宿主机上的一切!本文我们将尝试了解用户名、组名、用户 id(uid)和组 id(gid)如何在容器内的进程和主机系统之间映射,这对于系统的安全来说是非常重要的。说明:本文的演示环境为 Ubuntu 16.04(下图来自互联网)。
linux中,文件的权限分为”所有者、组、其他用户”三个角色,每个角色由3个bit位表示它的权限,3bit从左到右分别为读写执行三个权限,3bit的值范围为0~7。所以如果直接在linux执行chmod 777 xxx.sh代表,将xxx.sh文件赋予所有者、组、其他用户这三个角色对xxx.sh文件的读写执行权限。
有时候我们在做维护的时候,总会遇到类似于IO特别高,但不能判定是IO瓶颈还是软件参数设置不当导致热盘的问题.这时候通常希望能知道磁盘的读写速度,来进行下一步的决策.
每个方法都有优缺点,我们选择对程序代码改动最小(只改数据源)的方法三,讲解mycat的配置和使用。
在建立连接的时候,Nginx处于充分发挥多核CPU架构性能的考虑,使用了多个worker子进程监听相同端口的设计,这样多个子进程在accept建立新连接时会有争抢,这会带来著名的“惊群”问题,子进程数量越多越明显,这会造成系统性能的下降。
这本书是个人看过的讲操作系统底层里面讲的最通俗易懂的了,但是200多页的内容确实讲不了多深的内容,所以不要对这本书抱有过高期待,当一个入门书了解即可。
linux系统也是一种应用,它是基于计算机硬件的一种操作系统软件。当我们接收一次网络传输,计算机硬件的网卡会从网络中将读到的字节流写到linux的buffer缓冲区内存中,然后用户空间会调用linux对外暴露的接口,将linux中的buffer内存中的数据再读取到用户空间。这一次读操作就是一次IO。同样写也是这样的。
前言:本篇开始我们要对Linux进行更深入的学习了,让我们来进入新篇章:Linux的权限理解!
NFS是Network FileSystem的缩写,即网络文件系统,它可以实现挂载远程电脑上的设备到本地从而像访问本地磁盘一样操作,有点类似于windows 的网上邻居。是SUN公司1984年开发的,v1版本只在SUN公司内部使用过,v2, v3, v4是公开版本,一般红帽5默认是v3版本,红帽6默认目前最新的v4版本。
我们都听过Linux下一切皆文件,实际上无论是普通的文件读写,还是网络IO读写,它们都有着类似的操作过程。本文通过基本文件IO操作,来了解Linux“一切文件”的读写。当然过程中穿插着很多其他内容。
所有的电子产品,所用技术都可以认为要么是单片机,要么是Linux;GUI方面主要是QT/Android,它们都是运行于Linux之上的。
我们知道文件一般存放在硬盘(机械硬盘或固态硬盘)中,CPU 并不能直接访问硬盘中的数据,而是需要先将硬盘中的数据读入到内存中,然后才能被 CPU 访问。
业务需求方有个需要将apk包上传到服务器中,通过chfs可以将服务器目录共享出来,可以可以登录后台自行上传apk文件包。
tc(Traffic Control) 是linux系统中常用的来控制传输速率、模拟网络延时丢包等场景的工具,tc命令有三个主要的概念,是qdisc、class和filter,qdisc又分为classless qdisc和classful qdisc,在控制传输速度的方面大致有两种用法
存储按照对外提供服务的方式分为:块存储、文件存储、对象存储。块存储即我们日常说的SAN存储;文件存储即我们日常说的NAS存储;对象存储是最近几年才兴起的一种存储接口。
豆瓣成立于 2005 年,是中国最早的社交网站之一。在 2009 到 2019 的十年间,豆瓣数据平台经历了几轮变迁,形成了 DPark + Mesos + MooseFS 的架构。
本篇是高性能、高并发系列的第三篇,承接上文《读取文件时程序经历了什么》,在讲解了进程、线程以及I/O后,我们来到了高并发中又一关键技术,即I/O多路复用。
之前文章《Linux服务器性能评估与优化(一)》太长,阅读不方便,因此拆分成系列博文:
linux内存管理卷帙浩繁,本文只能层层递进地带你领略冰山轮廓,通过本文你将了解到以下内容:
启动一个程序,它是在芯片上电复位,以执行,块独立于操作系统而在。由于操作系统须要通过启动这个模块来载入和引导的。所以启动的英文术语是boot loader。我对boot loader的定义包含两部分:1.载入os 2. 为了让os可以正常执行所要做的硬件和软件初始化工作。
前面系列已经讲完了硬件选型、部署、调优,在上线之前呢需要进行性能存储测试,本章主要讲述下测试Ceph的几种常用工具,以及测试方法。
领取专属 10元无门槛券
手把手带您无忧上云