前言 本篇开始我们搭配着C++认识一个新的“大陆”——Linux操作系统,这一篇我们先来了解一下Linux是什么,以及Linux如何搭建环境 个人主页:小张同学zkf ⏩ 文章专栏:Linux...系统编程 若有问题 评论区见 欢迎大家点赞收藏⭐文章 1.Linux 背景介绍 说起Linux,我们必须先要提起UNIX UNIX 发展的历史 1968 年,一些来自通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫...国内如中标麒麟Linux、红旗 Linux、深度Linux等系统软件厂商都推出的Linux桌面操作系统,目前已经在政府、企业、 OEM等领域得 到了广泛应用。...但是,从系统的整体功能、性能来看, Linux桌面系统与Windows系列相比还有一定 的差距,主要表现在系统易用性、系统管理、软硬件兼容性、软件的丰富程度等方面。...的企业已经使用Linux操作系统进行云 计算、大数据平台的构建,目前, Linux已开始取代Unix成为最受青睐的云计算、大数据平台操作系统。
什么是操作系统? 指在系统中负责完成最基本功能和系统管理的部分, 操作系统有哪些组成部分?...内核——操作系统的内在核心 设备驱动程序 启动引导程序 命令行shell 其他种类的用户界面—-操作系统的外在表象 基本的文件管理工具和系统工具 Linux内核的组成 Linux内核源代码目录结构是什么...进程调度处于系统的中心位置,内核中其他的子系统都依赖它,因为每个子系统都需要挂起或恢复进程 进程如何在几个状态间切换? 在设备驱动编程中,当请求的资源不能得到满足时会怎样?...Linux 的每个进程享有4GB的内存空间,0~3GB属于用户空间,3~4GB属于内核空间 虚拟文件系统有什么作用?...Linux下的C 编程 Linux中宏定义、变量名、函数名命名习惯是什么?
下图给出Linux进程从被创建(生)到被回收(死)的全部状态,以及这些状态发生转换时的条件: ?...3,刚被创建的进程都处于“就绪”状态,等待系统调度,内核中的函数sched( )被称为调度器,他会根据各种参数来选择一个等待的进程去占用CPU。...换句话说:进程跟人一样,从来都没有什么平等可言,有贵族就有屌丝,他们要处理的事情有不同的轻重缓急之分。...当进程所等待的资源变得可获取时,又会被系统置为TASK_RUNNING状态重新就绪排队。...为什么一个进程的死掉之后还要把尸体留下呢?因为进程在退出的时候,将其退出信息都封存在他的尸体里面了,比如如果他正常退出,那退出值是多少呢?如果被信号杀死?那么是哪个信号呢?
Linux不是一个具体的操作系统,而是一类操作系统的总称,具体版本成为发行版。...Red Hat:目前被IBM收购,收费版,目前最大的Linux供应商 CentOS: Red Hat退出的免费版 Ubuntu:界面比较友好 虚拟机 学习Linux系统,就需要有一个可用的Linux系统...我们也不能将自己系统换成Linux系统,因为Linux系统并不适合日常办公使用,所以我们需要借助虚拟机来获得可用的Linux系统环境进行学习。 什么是虚拟机?...无论是什么命令,用于什么用途,在Linux中,命令有其通用的格式: 如:ls -l /home/demo 意思是以列表的形式,显示/home/demo目录内的内容 ls命令 当ls不使用参数,表示列出:...无论当前工作目录是什么,都能执行/usr/bin/cd这个程序,这个就是借助环境变量中:PATH这个项目的值来做到的。 在Linux系统中,符号被用于取”变量”的值。
[3]信号 (2)System 5 IPC对象进程间通信方式 [1]消息队列 [2]共享内存 [3]信号灯集 (3)socket通信 (4)Android系统中增加...Binder进程间通信方式 Linux 支持以上所有进程间通信方式 三 管道进程间通信 (1)无名管道 特点: 只能用于具有亲缘关系进程间通信(具有亲缘关系的进程具有数据拷贝动作...返回值: 成功返回0,失败返回-1 (2)管道读写规则 读端存在 ,写管道 ---->只要管道没有满,都可以写入数据到管道 读端不存在,写管道 ---->此时写管道没有意义,操作系统会发送...,返回值0 (3)有名管道 特点:可以用于任意进程间通信,它是一种特殊的文件,在文件系统存在名字, 而文件中存放的数据是在内核空间,而不是在磁盘上 1.创建一个有名管道文件... 子进程状态发生改变的时候,操作系统向父进程发送SIGCHLD,默认对它处理方式是忽略 typedef void (*sighandler_t)(int); sighandler_t signal
在上一篇文章中,我们已经对进程这个概念有了一个基本的认识,今天我们来继续学习进程的实战操作----父子进程对文件的操作,以及什么是僵尸进程和孤儿进程?下面我们就开始来揭开它们神秘的面纱!...(什么是接续写,简单理解就是对文件写操作完后,另外一个操作接着前面的那个操作继续往文件里面写东西)写的。...哈哈哈,听到僵尸两个字是不是有点小害怕,言归正传,在Linux系统中,我们要明白:进程在运行时是需要消耗系统资源(内存、IO),进程终止时理应完全释放这些资源(如果进程消亡后仍然没有释放相应资源则这些资源就丢失了...),所以linux系统设计时规定:每一个进程退出时,操作系统会自动回收这个进程涉及到的所有的资源(譬如malloc申请的内容没有free时,当前进程结束时这个内存会被释放,譬如open打开的文件没有close...同时,linux系统规定:所有的孤儿进程都自动成为一个特殊进程(进程1,也就是init进程)的子进程。
这是操作系统的根本要义!! Linux操作系统是一个免费且开源的操作系统,它基于Unix操作系统。...操作系统可以分为不同的类型,常见的操作系统包括Windows、macOS、Linux等。 2.Linux发展史 在这里简要介绍Linux的发展史。要说Linux,还得从UNIX开始介绍。...此外,Linux还应用于嵌入式系统、超级计算机、云计算等领域,展示了其广泛的适用性和灵活性。 目前,Linux已经成为全球最流行的操作系统之一。...但是,从系统的整体功能、性能来看,Linux桌面系统与Windows系列相比还有一定的差距,主要表现在系统易用性、系统管理、软硬件兼容性、软件的丰富程度等方面。...的企业已经使用Linux操作系统进行云计算、大数据平台的构建,目前,Linux已开始取代Unix成为最受青睐的云计算、大数据平台操作系统。
文件描述符 表示 宏 0 标准输入(stdin) STDIN_FILENO 1 标准输出(stdout) STDOUT_FINENO 2 标准错误(stderr) STDERR_FILENO 遵循Linux...open()系统调用 对文件进行读写之前,必须先打开文件。Linux提供了系统调用open()。...read()系统调用 文件打开后,就能够读文件了。read()是最基础、最常见的读取文件的机制。...系统调用write()时,数据从用户空间的缓冲区中拷贝到了内核空间的缓冲区,但并没有立即把数据写入磁盘中,这称为延迟写。延迟写的问题在于,如果在数据真正写入磁盘之前系统崩溃了,则数据可能丢失。...内核设置了一个时间,在该时间内将内核空间缓冲区上的数据写入磁盘,该时间称为"最大存放时效"。Linux系统也支持强制文件立即写入磁盘上,这在后面介绍。
资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...**Interrupt Register, GICC_EOIR** 4.3 GIC编程 参考资料: 4.1 GIC介绍 ARM体系结构定义了通用中断控制器(GIC),该控制器包括一组用于管理单核或多核系统中的中断的硬件资源...呈现给软件的中断ID由系统设计确定,一般在SOC的数据手册有记录。...SPI用于从整个系统可访问的各种外围设备发出中断信号。 ...伪中断ID是保留值,不能分配给系统中的任何设备。
什么是系统调用 首先系统调用能做那些事呢?概括来说,大概有下面这些事需要系统调用来实现。 控制硬件:系统调用往往作为硬件资源和用户空间的抽象接口,比如读写文件时用到的write/read调用。...比如 fork、clone、execve、exit等 那为什么一定要用系统调用来访问操作系统的内容呢,其实这可以看做对内核的保护,linux分为用户空间和内核空间,而用户空间是不允许访问内核空间的数据的...引入 cache 层的目的是为了提高 linux 操作系统对磁盘访问的性能。 Cache 层在内存中缓存了磁盘上的部分数据。...缓存的目标是任何基于页的对象,这包含各种类型的文件和各种类型的内存映射。为了满足普遍性要求,linux使用定义在linux/fs.h中的结构体address_space结构体描述页高速缓存中的页面。...->readpage 所指向的函数(变量 mapping 为 inode 对象中的 address_space 对象),那么这个函数到底是什么呢?
所以进程在运行的时候是可以被操作系统管理和调度的: 那这样的话就涉及一个问题,就是在某个时刻操作系统凭什么调度这个进程,让这个进程在CPU上运行而不是其它的进程呢?...因为这两个状态是操作系统中进程比较核心的两个状态,当然还有一个运行状态它相对比较好理解,我们后面针对具体的Linux操作系统去讲解。...而我们上面了解的内容其实就是基于操作系统这门课程来说的,可以认为它对于所有具体的操作系统都是成立的,可能比较抽象。 而我们下面呢,要针对一款具体的操作系统——Linux来学习一下进程的状态。...那再回到我们上面讲的: 我们创建进程帮我们做事有时候是关心结果的,那如何获取这个结果呢?...所以,为了方便子进程退出后父进程或操作系统获取该进程的退出结果,Linux进程退出时,进程一般不会立即死亡,而是要维持一个Z状态即——僵尸状态。 等这个进程真正被回收了,它的状态就会变成X死亡状态。
,记得刚开始学编程的时候,那时候就是从这里开始萌芽的。那么写了这么多函数,为啥要从这里开始“进门”呢,个人理解就是一种规定。...main()函数: 然而在我们Linux系统里面编程,它也是要准备一些前期工作的:它要有编译链接时的引导代码-------操作系统下的应用程序其实在main执行前也需要先执行一段引导代码才能去执行main...1、前面的索引,都是为了现在来讲什么是进程?进程是一个独立的可调度的任务,进程是一个抽象实体。...当系统在执行某个程序时,分配和释放的各种资源,进程是一个程序的一次执行的过程(通俗的讲,进程就是程序的一次运行过程,一个静态的可执行程序a.out的一次运行过程(....它一般在Linux启动时开始执行,系统关闭时才结束。
如果返回的pid_t等于0的话表示当前的进程是子进程,如果返回的pid_t是大于0的数说明当前的进程是父进程,如果返回-1说明出错并设置errno。...其中父进程的id为3912,子进程的id为3913,其中父进程的父进程应该为终端的进程,id为2149。 ...最开始的linux的创建子进程的实现方法是在子进程创建时就直接将父进程的所有内容复制到子进程中,但是这一操作会造成不必要的资源和时间的消耗。所以就有了读时共享,写时复制的机制。...系统会为子进程创建其自己的4G的虚拟内存,而虚拟内存又分为内核内存和用户内存,大小比为1:3。子进程的虚拟地址映射了父进程的虚拟地址所指向的物理内存,所以父子进程实际上共享了同一块物理内存。...那么对于父子进程来说它们应该是两个独立的进程,所以当父子进程对物理内存进行读的操作时,二者是共享的,但是如果父或子进程要进行写操作的时候,此时父进程才会将要操作的内容复制给子进程。
那同样的,在计算机里面,光有那些硬件也是不行的,什么情况下把什么数据预加载到什么位置,内存空间不够了怎么办,输出结果要保存到文件,应该放到什么位置…等等这些问题都不是你硬件能解决的。...那软件的话通过上一篇文章的学习我们知道软件想要运行的话就要先加载到内存里,那其实我们计算机开机的时候就是在加载操作系统。 那操作系统是一款什么样的软件呢?...比如校长告诉辅导员,让他下周一举办一个编程大赛,然后辅导员去落实,去准备,最后我们学生去执行。...,那校长其实就对应计算机中的操作系统,学生就对应计算机中的软硬件,而辅导员则对应硬件驱动。 3. 操作系统为什么要做管理 那操作系统为什么要对软硬件资源进行管理呢?...比如有些操作系统上有人就基于系统调用接口写了图形化界面,有的操作系统设计者就基于系统调用接口写了shell和工具集,还有比如C语言里面的一些库函数或者Linux上的一些命令,我们可以直接使用,但他的底层可能就是去调用对应的系统调用去完成对应的操作
那在讲之前呢先给大家再补充一点东西: 我们在上一篇文章中有提到一个叫做家目录的概念,那我们登录上自己的机器的时候,其实默认就是处在自己的家目录下的。...总结一下: mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。...为什么会这样呢? echo "aaa bbb c" > tmp.txt中的>这个符号可以实现输出重定向。 什么意思呢? 其实就可以理解为重新确定了输出的方向。...也就是说,cat如果后面不跟文件的话,它默认是从键盘去读取数据的,我们敲什么,它就读取什么然后并显示出来。...补充说明:uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。
从这篇文章开始,我们要来学习一些Linux中的开发工具。 这篇文章,我们先来学习一下Linux中的文本编辑器——vim。 1....什么是vim 首先我们来认识一下什么是vim Vim(Vi IMproved)是一款文本编辑器,它是从 Vi 编辑器发展而来的。...我们这里主要讲解vim的3种模式: 正常/普通/命令模式(Normal mode) 插入模式(Insert mode) 末行/底行模式(last line mode) 除此之外还有一个替换模式和视图模式我们讲的时候也会提一下...但是我输了自己的密码还是用不了。 那这是怎么回事呢? 我当前这个用户之所以用不了sudo,是因为我并不在系统的信任列表里面。...sudo 的目的是确保系统的安全性,避免普通用户在没有适当权限的情况下执行危险或敏感的操作。只有经过授权的用户才可以使用 sudo,并且需要提供自己的密码来进行身份验证。
为什么有大小端: 在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。...shutdown(tcp_client_fd,SHUT_WR); //TCP半关闭,保证缓冲区内的数据全部写完 直接强制关闭连接示例: int close(int fd); 1.9 查看Linux系统当前的网络连接...在/proc/net/tcp目录下面保存了当前系统所有TCP链接的状态信息。...信号 3.8 获取网络底层缓冲区发送剩余字节数 在网络编程时,发送方调用write(fd)将报文发送的时候实际上只是写入了内核的write buffer。...接收方什么时候能收到报文是个未知数。 在某些需要同步状态机的地方,发送方最好能够确认接收方收到报文后再进行下一步动作。
1. shell是什么?它有什么作用? Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。...shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果再通过内核运行出结果,通过shell解析给用户。...下面我们讲一个故事,来帮助大家更好的理解 2....波澜渐起(正常命令的处理) 第二天,王婆就如约来到小帅家,问小帅,你对你的另一半有什么要求吗? 小帅告诉王婆说,没什么要求,我就喜欢隔壁的如花,您帮我说一说。...故事角色与处理过程中各部分的映射 那通过上面的故事,相信大家已经有了一点理解了: 那故事中的小帅,其实就是对应用户,王婆就对应shell,如花就对应操作系统。 为什么小帅不直接找如花呢?
1.Linux权限的概念 ✨Linux下有两种用户:超级用户(root)、普通用户。...超级用户:可以再linux系统下做任何事情,不受限制 普通用户:在linux下做有限的事情 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。...要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令 这里可以从root超级用户切换到普通用户: su tutu //tutu...:普通用户的名字 因为root用户可以再linux系统下做任何事情,不受限制,所以从它切换到普通用户不用输入密码,而当普通用户切换到超级用户时则需要输入超级用户的密码; ☑️如何创建一个普通用户?...每个文件和目录都有一个所有者和一个所属组,而且还可以赋予其他用户的访问权限。Linux权限控制了文件和目录的读、写和执行权限,通过设置不同的权限组合可以限制用户对文件和目录的访问。
这篇文章我们继续学习Linux中的开发工具。 经过之前的学习,我们已经能够在Linux上编写代码、运行代码和通过git管理代码了。...但是如何在Linux上调式代码我们还不知道,所以今天要学的是Linux调试器——gdb 的基本使用。 1. 准备工作及知识补充 那要使用调式器调式,首先我们得有代码,有可执行程序。...如果大家平时写C/C++代码用的是vs的话,应该会注意到,在vs上生成程序的时候就有两种模式 debug和release的了解 两者有什么区别呢?...那在Linux上gcc/g++编译生成的可执行程序其实默认是release版本的,不包含调式信息,所以我们无法调式! 如何解决 那如何让它以debug版本生成呢?...那在gdb中与之对应的操作是什么呢? 首先逐过程: 开始调式,到16行的断点就停止了,对应的是一个函数调用。 如果我想逐过程,直接走到下一句代码呢?
领取专属 10元无门槛券
手把手带您无忧上云