《操作系统》Linux掠影笔记
文章平均质量分 93
Yngz_Miao
这个作者很懒,什么都没留下…
展开
-
【Linux】虚拟机和Red Hat 5操作系统零基础安装(附:软件下载链接、图)
Linux定制安装个人PC可以安装独立的Linux操作系统,也可以采用虚拟机在Windows平台上安装Linux系统。对于初学嵌入式系统开发的人来说,采用在Windows平台上安装虚拟机是一种比较合理的选择。虚拟机版本:VMware10Linux操作系统版本:Red Hat Enterprise Linux 5附上虚拟机VMware10的下载链接:虚拟机VMware10(可能...原创 2018-05-24 18:19:46 · 9994 阅读 · 1 评论 -
【Linux】Linux进程通信与System V IPC机制
Linux进程通信基本概念从原理上来看,进程通信的关键技术就是在进程间建立某种共享区,利用进程都可以访问共享区的特点来建立一些通信通道。如下图所示:其实,以前设计程序时使用的全局变量,就是一种可以在各个函数之间进行通信的手段,它所占用的内存空间就是程序中各个函数的共享区。但那时,由于各个函数都同属于一个进程,因此没有进程空间的障碍。所以,解决进程之间通信的就在于如何突破进程空间的障碍。...原创 2018-08-09 21:17:38 · 8888 阅读 · 0 评论 -
【Linux】Linux文件目录
从文件管理的角度来看,文件分为数据文件和目录文件。由于目录文件是管理文件,所以从管理的角度来看,文件中目录的结构就会直接影响文件管理效果。目前,常见的目录结构有两种:一体化目录和分立式目录。 一体化目录一体化目录与文件之间关系示意图如下:也就是说,这种目录的特点就是把一个文件的所有信息都放在一个目录项中,所以叫做一体化目录。 分立式目录由于一体化目录把用户没有必要知...原创 2018-08-01 20:00:40 · 8224 阅读 · 0 评论 -
【Linux】Linux的共享内存
实现进程间通信最简单也是最直接的方法就是共享内存——为参与通信的多个进程在内存中开辟一个共享区。由于进程可以直接对共享内存进行读写操作,因此这种通信方式效率特别高,但其弱点是,它没有互斥机制,需要信号量之类的手段来配合。 共享内存原理与shm系统共享内存,顾名思义,就是两个或多个进程都可以访问的同一块内存空间,一个进程对这块空间内容的修改可为其他参与通信的进程所看到的。显然,为了达...原创 2018-08-10 19:17:45 · 26964 阅读 · 4 评论 -
【Linux】Linux文件与进程的关联
作为文件的使用者,进程理所当然地将要使用的文件记录于自己的控制块。另外,由于进程所对应的程序也是一个文件,因此进程控制块还必须记录这个文件的相关信息。由于操作系统要对系统所以进程提供服务,因此操作系统还要维护一个记录所有进程打开文件的总表。 进程与其打开文件的关系如果说文件管理系统是文件的管理者与提供者,那么进程就是文件系统中文件的使用者。即,文件管理系统与进程之间是服务与客户之间的关...原创 2018-08-06 21:50:27 · 10393 阅读 · 0 评论 -
【Linux】Linux的管道
管道是Linux由Unix那里继承过来的进程间的通信机制,它是Unix早期的一个重要通信机制。其思想是,在内存中创建一个共享文件,从而使通信双方利用这个共享文件来传递信息。由于这种方式具有单向传递数据的特点,所以这个作为传递消息的共享文件就叫做“管道”。在管道的具体实现中,根据通信所使用的的文件是否具有名称,有“匿名管道”和“命名管道”。 管道与共享内存的区别乍一看,感觉管道和共享...原创 2018-08-14 20:28:25 · 42098 阅读 · 1 评论 -
【Linux】Linux Ext2文件系统
下面以Linux的Ext2为例介绍文件系统的组成。Ext2采用了分立式目录结构,即一个文件的目录分为目录项和索引节点两个部分。 Ext2的索引节点在一个实际分立式目录的文件系统中,索引节点(inode)主要需要两部分内容来支持:一是inode结构;二是对于节点的操作函数。Ext2的索引节点Ext2的每个文件(或目录)都有唯一的i节点ext2_inode,它保存了一个文件所有...原创 2018-08-02 20:21:47 · 9028 阅读 · 0 评论 -
【Linux】Linux根据文件路径查找索引节点
根据文件路径查找索引节点操作系统的文件管理系统的主要作用就是,当用户需要访问一个文件时,系统可以通过用户给出的文件路径找到文件的索引节点,从而找到文件,并以文件对象的实例交付给用户进程。下面就以系统调用open()为例来说明文件的查找过程,以加深对文件系统的理解和认识。系统调用open()的内核函数为sys_open(),下图描述了用户进程调用系统调用open()的整个流程:sys...原创 2018-08-07 18:41:47 · 14186 阅读 · 0 评论 -
【Linux】Linux的信号
Linux的信号是一种系统或进程发出的通知,它的主要作用是用来激活信号接收者的一段程序,除此之外,也可以携带少量信息。从实现方式上来看,它是一种用软件构建的中断系统,只不过接收及处理中断请求的不是处理器而是进程。与外设向处理器的中断请求一样,它是一种异步通信方式。 基本概念计算机系统必须创建某种机制,要使发生事件的实体能在事件发生时将这个事件发送出去,同时还要使希望感知这个事件的实体能...原创 2018-08-15 22:37:27 · 8013 阅读 · 0 评论 -
【Linux】Linux的消息队列
消息队列亦称报文队列,也叫做信箱。意思是说,这种通信机制传递的数据具有某种结构,而不是简单的字节流。消息队列的工作机制如下所示: 消息的结构用户空间的消息缓冲区为在进程与内核之间传递消息,无论发送进程还是接收进程,都需要在进程空间中用消息缓冲区来暂存消息。该消息缓冲区的结构定义如下:struct msgbuf { long mtype; /* 消息的类型...原创 2018-08-13 19:14:09 · 10903 阅读 · 2 评论 -
【Linux】Linux的信号量集
所谓信号量集,就是由多个信号量组成的一个数组。作为一个整体,信号量集中的所有信号量使用同一个等待队列。Linux的信号量集为进程请求多个资源创造了条件。Linux规定,当进程的一个操作需要多个共享资源时,如果只成功获得了其中的部分资源,那么这个请求即告失败,进程必须立即释放所有已获得资源,以防止形成死锁。 信号量集的结构信号量结构描述信号量的内核数据结构如下:struct s...原创 2018-08-18 22:33:08 · 13204 阅读 · 2 评论 -
【Linux】Linux的同步控制
在多任务系统中,通常会有多个进程以并发的方法在运行,这种并发活动与单任务系统相比有着截然不同的一些特征:由于进程何时运行、何时中止不由程序设计者来掌握,而是由调度器来决定,即并发活动的随机性; 由于系统资源数量的限制,必然会使多个需要同时使用同一资源的进程发生冲突,即并发活动的竞争性; 由于共享资源的存在,使得进程在共享资源上的活动能够被其它进程了解和干涉,即并发活动的开放性; 当多个进...原创 2018-08-16 22:41:32 · 8359 阅读 · 0 评论 -
【Linux】Linux网络编程(含常见服务器模型,上篇)
基本数据结构介绍Linux系统是通过提供嵌套字(socket)来进行网络编程的。网络程序通过socket和其他几个函数的调用,会返回一个通用的文件描述符,用户可以将这个描述符看成普通的文件的描述符来操作,这就是Linux的设备无关性的好处。用户可以通过向描述符的读写操作实现网络之间的数据交流。表示套接口的socket结构体struct socket { socket_state ...原创 2018-09-02 20:37:16 · 59744 阅读 · 0 评论 -
【Linux】Linux多线程技术
Linux多线程概念线程的概念线程是计算机科学中的一个术语,是指运行中的程序的调度单位。一个线程指的是进程中一个单一顺序的控制流,也称为轻量进程。它是系统独立调度和分配的基本单位。同一进程中的多个线程将共享该进程中的全部系统资源,例如文件描述符和信号处理等。一个进程可以有很多线程,每个线程并行执行不同的任务。线程与进程的区别根本区别:进程是操作系统资源分配的基本单位,而线程是任务调...原创 2018-09-05 15:57:23 · 59069 阅读 · 0 评论 -
【Linux】Linux网络编程(含常见服务器模型,下篇)
上一篇文章:【Linux】Linux网络编程(含常见服务器模型,上篇)。 高级嵌套字函数前面介绍的一些函数(read、write等)都是网络程序里最基本的函数,也是最原始的通信函数。下面介绍一下几个网络编程的高级函数:recv()函数int recv(int s, void *buf, int len, unsigned int flags);函数说明:经socket接收...原创 2018-09-03 21:07:50 · 58598 阅读 · 0 评论 -
【Linux】Linux线程私有数据
线程私有数据在单线程程序中,函数经常使用全局变量或静态变量,这是不会影响程序的正确性的,但如果线程调用的函数使用全局变量或静态变量,则很可能引起错误。因为这些函数使用的全局变量和静态变量无法为不同的线程保存各自的值,而当同一进程内的不同线程几乎同时调用这样的函数时就可能会有问题发生。而解决这一问题的一种方式就是使用线程私有数据。线程私有数据采用了一种被称为一键多值的技术,即一个键对应多个数...原创 2018-09-10 16:52:08 · 8697 阅读 · 1 评论 -
【Linux】虚拟机和Ubuntu14.04操作系统零基础安装(附:软件下载链接、图)
Linux定制安装个人PC可以安装独立的Linux操作系统,也可以采用虚拟机在Windows平台上安装Linux系统。对于初学嵌入式系统开发的人来说,采用在Windows平台上安装虚拟机是一种比较合理的选择。虚拟机版本:VMware10Linux操作系统版本:Ubuntu 14.04附上虚拟机VMware10的下载链接:虚拟机VMware10(可能需要注册一个VMware账号)还有Li...原创 2019-06-11 16:04:46 · 24761 阅读 · 5 评论 -
【Linux】Linux操作系统对文件系统的管理
在虚拟文件系统的支持下,Linux可以支持迄今为止的大多数文件系统。但是,Linux并不是在初始化时就把所有文件系统全部都装入,而只是安装一个文件系统(通常是Ext2)作为根文件系统。根文件系统在整个系统运行过程中是不能被拆卸的,是系统的基本组成部分。通常,根文件系统上主要安装了保证系统正常工作运行的操作系统代码文件以及若干语言编译程序、命令解释程序和相应的命令处理程序等文件。其他文件系统则都定义...原创 2018-08-05 17:45:37 · 9395 阅读 · 1 评论 -
【Linux】Linux进程的创建与管理
在Linux系统中,除了系统启动之后的第一个进程由系统来创建,其余的进程都必须由已存在的进程来创建,新创建的进程叫做子进程,而创建子进程的进程叫做父进程。那个在系统启动及完成初始化之后,Linux自动创建的进程叫做根进程。根进程是Linux中所有进程的祖宗,其余进程都是根进程的子孙。具有同一个父进程的进程叫做兄弟进程。Linux进程创建的过程示意图如下所示: 子进程的创建在Li...原创 2018-07-27 19:21:29 · 47145 阅读 · 15 评论 -
【Linux】Linux文件与文件的存储
文件的基本概念文件就是一组按照某种格式组织的具有完整逻辑意义的信息。从使用和创建文件的用户角度来看,文件是磁盘的最小存储单元,用户数据除非在文件中,否则不能保存到磁盘;从进程的角度来看,文件是一种进程可以对它进行访问的,但独立于进程而存在的数据结构,文件中的信息不会因进程的死亡而消失,除非文件的属主显式地删除它;从操作系统的角度来看,文件是一个逻辑上连续的数据集合,它仅向系统提供文件管理所...原创 2018-07-31 18:39:51 · 15449 阅读 · 0 评论 -
【Linux】Linux常用命令
Linux是一个可靠的、高性能的系统,而所有的这些优越性只有在直接使用Linux命令行时才能充分地体现出来。Linux系统安装成功后,就可以进入到与Windows类似的图形化界面了。这个界面就是Linux图形化界面X窗口系统的一部分。X窗口系统仅仅是Linux上的一个软件,它并不是Linux自身的一部分。虽然X窗口系统已经和Linux系统整合的非常好,但还是不能保证绝对的可靠性。另外,X窗口系...原创 2018-05-29 09:55:03 · 58727 阅读 · 0 评论 -
【Linux】Linux脚本编程
脚本编写基础变量和参数变量替换变量的名字是它的值保存的地方。引用它的值称为变量替换。如果varible1是一个变量,那么$varible1就是引用该变量的值,即这个变量包含的数据。解释:$为变量替换符,表示引用该变量的内容。变量赋值用“=”对变量进行赋值,“=”的左右两边不能有空白符。bash变量无类型不同于许多其他编程语言,bash不以“类型”区分变量。本质上说,...原创 2018-06-04 20:36:21 · 8753 阅读 · 0 评论 -
【Linux】Linux编程基础(vi、gcc、gdb)
编写一个程序,首先是程序的录入,然后是程序的编译,最后是程序的调试。本文介绍进行这三步工作的主要工具:vi、gcc、gdb。编辑器介绍Linux提供了一个完整的编辑器家族系列。按功能可以分为两大类:行编辑器(Ed、Ex)和全屏幕编辑器(vi、Emacs)。行编辑器每次只能队一行进行操作,而全屏幕编辑器可以对整个屏幕进行编辑。vi介绍vi是全屏幕编辑器中的一种,它有三种模式,分...原创 2018-06-05 16:35:34 · 9537 阅读 · 0 评论 -
【Linux】Samba服务器超详细安装、配置(附带各种问题解决方式)
在嵌入式系统开发应用平台中,tftp、nfs和samba服务器是最常用的文件传输工具,tftp和nfs是在嵌入式Linux开发环境中经常使用的传输工具,samba则是Linux和Windows之间的文件传输工具。samba是模仿Windows网上邻居的SMB的通讯协议,将Linux操作系统“假装成”Windows操作系统,通过网上邻居的方式来进行文件传输的。虚拟机版本:VMware1...原创 2018-05-30 19:14:07 · 248313 阅读 · 23 评论 -
【Linux】Linux的虚拟内存详解(MMU、页表结构)
内存是程序得以运行的重要物质基础。如何在有限的内存空间运行较大的应用程序,曾是困扰人们的一个难题。为解决这个问题,人们设计了许多的方案,其中最成功的当属虚拟内存技术。Linux作为一个以通用为目的的现代大型操作系统,当然也毫不例外的采用了优点甚多的虚拟内存技术。 虚拟内存为了运行比实际物理内存容量还要大的程序,包括Linux在内的所有现代操作系统几乎毫无例外的都采用了虚拟内存技术。虚拟...原创 2018-07-16 20:16:28 · 90893 阅读 · 31 评论 -
【Linux】Linux物理内存的管理
Linux物理页框的描述为了管理和描述物理页框,Linux在文件/include/linux/mm.h中定义了page结构:struct page { page_flags_t flags; /* 页的一些状态标志*/ atomic_t _count; /* 计数器,记录了访问本页框的程序数 */ atomic_t _mapcount; /* mm映射的的...原创 2018-07-18 19:30:08 · 8852 阅读 · 0 评论 -
【Linux】Linux进程简介及其五种状态
由操作系统定义,并由操作系统所操控的一个特殊的数据结构实例叫做进程。它连接了用户代码,拥有代码运行所需的独立内存空间,在调度器的调度下使用分配给它的处理器时间片来运行。 进程及其私有内存空间进程类似于UCOSIII中的任务,它也是用户应用程序可执行代码在系统中的一个运行过程。系统中用来表示进程身份和存在的也是控制块,只不过叫做进程控制块。进程与UCOSIII任务之间最重要的一个区别就是...原创 2018-07-24 21:42:36 · 30301 阅读 · 4 评论 -
【Linux】Linux基础知识(Linux系统、Linux中的链表)
Linux系统简介Linux系统的结构及特点Linux系统的结构图如下图所示:从上图可以看出,Linux是一个典型的宏内核(一体化内核)结构。硬件系统上面时硬件抽象层,在硬件抽象层上面时内核服务功能模块,这些模块通过系统调用接口向用户进程提供服务。Linux进程管理的系统调用包括:进程的创建、调度、中止、等待等。 Linux支持内存管理控制器MMU,使用虚拟内存管理机制。虚拟...原创 2018-07-13 18:13:49 · 9968 阅读 · 3 评论 -
【Linux】Linux虚拟内存空间描述
虚拟内存区的描述由于虚拟空间是程序员使用的空间,在程序员的头脑中并不需要页的概念,因此也不需要页的描述,在虚拟空间Linux描述的是分区。所谓分区,就是按照虚存的代码或数据的属性分成的段。描述虚拟分区的结构定义在文件include/linux/mm.h中,其主要内容如下:struct vm_area_struct { struct mm_struct * vm_mm; /* 指向上级结...原创 2018-07-19 20:51:27 · 8829 阅读 · 1 评论 -
【Linux】Linux基础知识(Linux模块)
Linux的内核模块机制允许开发者动态的向内核添加功能,我们常见的文件系统、驱动程序等都可以通过模块的方式添加到内核而无需对内核重新编译,这在很大程度上减少了操作的复杂度。模块机制使内核预编译时不必包含很多无关功能,把内核做到最精简,后期可以根据需要进行添加。而针对驱动程序,因为涉及到具体的硬件,很难使通用的,且其中可能包含了各个厂商的私密接口,厂商几乎不会允许开发者把源代码公开,这就和lin...原创 2018-07-14 18:51:17 · 17160 阅读 · 0 评论 -
【Linux】Linux的内核空间(低端内存、高端内存)
内核也是程序,也应该具有自己的虚存空间,但是作为一种为用户程序服务的程序,内核空间有它自己的特点。 内核空间与用户空间的关系在一个32位系统中,一个程序的虚拟空间最大可以是4GB,那么最直接的做法就是,把内核也看作是一个程序,使它和其他程序一样也具有4GB空间。但是这种做法会使系统不断的切换用户程序的页表和内核页表,以致影响计算机的效率。解决这个问题的最好做法就是把4GB空间分成两个部...原创 2018-07-20 16:50:01 · 70936 阅读 · 7 评论 -
【Linux】Linux的进程调度
长期以来,Linux一直把具有较好的平均系统响应时间和较高的吞吐量作为调度算法的主要目标。但近年来,鉴于嵌入式系统的要求,Linux2.6在支持系统的实时性方面也做出了重大的改进。 Linux进程的时间片与权重参数在处理器资源有限的系统中,所有进程都以轮流占用处理器的方式交叉运行。为使每个进程都有运行的机会,调度器为每个进程分配了一个占用处理器的时间额度,这个额度叫做进程的“时间片”,...原创 2018-07-29 18:52:19 · 68116 阅读 · 4 评论 -
【Linux】Linux操作系统的文件管理系统
操作系统作为磁盘文件系统和用户之间的中介,必须在内核中建立自己的文件系统,为与磁盘文件系统相区别,我们把它叫做操作系统的文件管理系统,简称文件管理系统。 文件管理系统与磁盘文件系统的关系与处理器相比,磁盘是一种工作速度极其缓慢的外部设备,操作系统很难直接利用磁盘文件系统来对文件进行操作。因此,操作系统必须根据磁盘文件系统提供的各种基本信息在内存中建立必要的缓冲数据结构,一方面为了避免频...原创 2018-08-03 21:41:07 · 15164 阅读 · 0 评论 -
【Linux】Linux内核空间的slab分配模式
内核在运行时,经常需要在内核空间3G~3G+high_memory这个内存空间申请动态内存,以存放一些结构类型的数据。例如,在创建一个程序时,它就要为该程序控制块task_struct申请一段内存空间;在撤销这个程序时,又要释放这个空间。在内核中,由于这种结构体类型数据的数量相当大,而数据所占的内存空间又不可能刚好是一个或多个页框,所以在以页框为最小分配单位的分配方法里,这种数据产生的碎片就相当多...原创 2018-07-22 22:42:16 · 9130 阅读 · 0 评论 -
【Linux】Linux 2.6 对调度器的改进
从进程调度的角度来看,Linux2.6之前的版本有如下的缺点:由于只设置了一个进程就绪队列,于是在一轮调度中先耗尽时间片的进程虽然已经无法取得处理器控制权,但是还要参与weight值的计算,导致白白浪费了处理器的时间; 调度算法与系统负荷的关系较大。也就是说,调度器耗时与当时系统内进程数量有关:数量大,耗时长;数量小,耗时短。不适合应用在硬实时系统; 在多处理器系统中,由于只有一个就绪队列...原创 2018-07-30 19:21:04 · 58429 阅读 · 0 评论 -
【Linux】Linux的虚拟文件系统
Linux的虚拟文件系统与实际文件系统的关系如下所示: VFS的原理各种文件系统之所以有区别,就在于它们的目录文件结构各不相同,随之而来的也就是对文件目录的操作函数也不相同。对于前者可以在保留原系统目录结构的基础上,再构建一个新的统一的目录文件结构,而这个新目录文件中的信息是通过提取原系统目录文件信息进行重新组织来建立的。这样,用户面对的就不再是五花八门的目录文件,而是一个统一的目...原创 2018-08-04 20:01:27 · 10387 阅读 · 1 评论 -
【Linux】Ubuntu下安装并配置Android-NDK(附详细过程)
Android-NDKNDK是Native Develop Kit的含义,从含义很容易理解,本地开发。一般而言,Android开发语言是Java。不过我们也知道,Android是基于Linux的,其核心库很多都是C/C++的,比如Webkit等。那么NDK的作用,就是Google为了提供给开发者一个在Java中调用C/C++代码的一个工作。NDK本身其实就是一个交叉工作链,包含了Androi...原创 2019-06-29 14:28:46 · 31501 阅读 · 2 评论