Linux
文章平均质量分 84
Zheyuan Zou
中国科学技术大学2021级计算机系统结构硕士研究生,E-mail:[email protected]
展开
-
学习Linux系统编程-Day(7)
1.之前已经提到过,在Linux系统的设计哲学中有“万物皆文件”的定律,而Linux系统本身也提供了一整套面向文件的通用编程接口,这部分是通用的接口。原创 2021-03-28 16:51:32 · 125 阅读 · 1 评论 -
学习Linux系统编程-Day(10)
1.有些时候关于文件的重定向,我们想让它们共享同一套打开文件。我们这样做可能是为了临时保存当前某个文件描述符,也有可能是担心不同的两个读写指针指向同一文件会导致写覆盖。在需要这样做时,我们可以使用复制文件描述符这种技术来将不同的文件描述符指向同一打开文件表项(就像下图1号和20号文件描述符一样)。dup,dup2,dup3这三个系统调用就是用来实现文件描述符复制的,就像名称那样,它们的功能逐渐增强。首先是最简单的dup系统调用:要使用dup系统调用,必须添加头文件<unistd.h>,此原创 2021-04-04 17:05:29 · 122 阅读 · 0 评论 -
学习Linux系统编程-Day(9)
1.在Linux系统的设计中,所有的系统调用都是以原子形式存在的,所谓系统调用的原子性,就是指系统调用在执行过程中的所有步骤都会作为独立操作一次性执行完毕,而不会被其他线程中断。原子操作的方法是规避竞争状态的有效手段之一,处于竞争状态下的多个线程其执行结果是不确定的,这取决于CPU的调度,为了防止处于内核态的系统调用出现竞争,故而规定所有的系统调用都是原子操作,这本质上还是通过屏蔽中断来实现的。2.在文件系统中也存在很多关于原子操作和竞争的问题,书上就这一点举了两个不好的使用习惯和例子,并讲述了如何使用o原创 2021-03-31 11:56:24 · 288 阅读 · 0 评论 -
学习Linux系统编程-Day(8)
1.read系统调用用来读取文件内容,其函数原型如下:注意调用read系统调用需要添加头文件unistd.h,在read的参数中fd表示要读取的文件描述符,buffer是接收读取结果的缓冲区,count是最多能读取的字节数量。注意buffer需要用户自行申请并将缓冲区首地址传入,所以这个自行申请的缓冲区一定不要开得太小了,起码要大于count个字节。返回值是实际读取的字符数量,注意类型是ssize_t,这是一个有符号类型数,出错时返回-1。实际上在调用read系统调用时,读取的数据字节数可能会小于co原创 2021-03-29 10:35:04 · 89 阅读 · 0 评论 -
学习Linux系统编程-Day(6)
1.有些库函数的功能其实是对底层系统调用的进一步封装和优化,使得它们更加方便易用,也有另外一些库函数的实现与系统调用无关。2.在绝大部分Linux上都提供了对GNU C Library的实现(glibc),有多种方法可以查看搭载Linux操作系统的计算机上的glibc版本,其中比较可靠的是使用gnu_get_libc_version()函数来查看glibc版本。最后在终端中输出我的计算机搭载的是2.23版本的glibc。3.无论如何,除极少部分一定可以成功的系统调用以外(getpid(), exi原创 2021-03-23 19:39:59 · 132 阅读 · 0 评论 -
学习Linux系统编程-Day(5)
1.shell中的每个程序都会在一个新进程内被发起。几乎所有主流的shell都会提供任务控制的特性,也就是支持用户同时执行和操纵多条任务和管道。且管道内(一条命令行)所有进程都会被放置到一个新的进程组中,组中的每个进程都有一个相同的进程组ID,此ID为进程组组长(process group leader)的进程ID。内核可以对组中所有进程执行同样的操作2.会话的概念建立在进程组之上,正如进程组中保管着多个进程,一个会话包含多个进程组(任务),会话中的所有进程都有着相同的会话ID。创建会话的进程叫做会话首进原创 2021-03-22 17:13:06 · 88 阅读 · 0 评论 -
学习Linux系统编程-Day(4)
1.内存映射mmap机制是Linux中非常重要的机制之一,它可以用来提升文件访问效率、进程间通信等。注意mmap系统成功调用时返回的是映射区的起始地址,此后在代码中(用户地址空间下)对此区域的读写在逻辑上等价于对被映射区域的读写。这部分是一个比较大的话题,可以参考更多书籍和博客来加深对mmap的理解。以我的经验,在FPGA加速器的开发中,由于MMU的存在,硬件加速器寄存器地址也需要通过mmap映射到用户空间,在此基础上再编写加速器的主控逻辑,这部分也同样需要mmap函数,在此略过。2.静态库与共享库都是目原创 2021-03-05 08:59:52 · 92 阅读 · 0 评论 -
学习Linux系统编程-Day(3)
一、文件I/O模型1.Linux/UNIX系统I/O模型最为显著的特征之一是I/O通用性概念,也就是同一套系统调用( open()、 read()、 write()、 close()等)所执行的 I/O 操作,可施之于所有文件类型。所有类型的文件在内核的本质是一样的,都是字节流序列,可以使用lseek系统调用来随机访问。2.Linux系统使用文件描述符(File Descriptor)来指代一个打开的文件,文件描述符一般是一个数值很小的非负整数。我们在Linux-c编程中使用open来打开文件的过程,实原创 2021-02-01 23:52:29 · 78 阅读 · 0 评论 -
学习Linux系统编程-Day(2)
一、用户和组1.用户信息记录在Linux系统下的/etc/passwd文件中,其中记载了用户唯一的用户名和唯一的整数型用户ID(UID)。还包含以下信息:组 ID:用户所属第一个组的整数型组 ID。主目录:用户登录后所居于的初始目录。登录 shell:执行以解释用户命令的程序名称(我的默认指令解释器是bash)。2.组:一个用户可以同时属于多个组,关于系统中用户组的信息都记录在/etc/group中,其中包含了以下信息:组名: (唯一的)组名称。组 ID( GID):与组相关的整数型 ID。原创 2021-02-01 00:06:06 · 82 阅读 · 0 评论 -
学习Linux系统编程-Day(1)
本系列博客是对《Linux系统编程手册》的阅读笔记,从全书的第二章开始记载。一、操作系统的两层含义1.完整的软件包,包含管理计算机系统资源的核心层软件以及附带的所有标准软件(命令行解释器、图形用户界面、文本编辑器等)。2.单独指负责管理计算机资源的核心层软件。在书中,当提到操作系统时,往往指操作系统内核。二、内核的职能0.进程的概念:指一段程序的执行过程,这是一个动态概念。1.进程调度:进程调度规则控制着哪些进程获得对 CPU 的使用,以及每个进程能使用多长时间,这两者都由内核进程调度程序(而原创 2021-01-30 10:38:38 · 106 阅读 · 0 评论 -
Learning Linux(4)-开发Zynq应用程序并上板测试
一、使用SDK开发应用程序转载 2021-01-26 10:57:05 · 936 阅读 · 0 评论 -
Learning Linux(3)-Petalinux(2)
一、字符图形化配置界面的配置项分类启用/禁用配置项这种是二选一的配置项,也就是说只有启用和禁用两个选项。这种配置项前面只有一个中括号[],如果这个选项被选中,就会显示为[*],否则还是[]。如图所示:多选一配置项这种配置项是从多个配置项中选择一个出来,配置项字符串后面一般有一个小括号和一个小箭头,表示一个可选的子菜单。就像上图中的u-boot那样,当然可以按下Enter键去进行多个选项的选择,如下所示:可编辑配置项这种是可以由用户自行指定和输入的,配置项字符串的前方有一个小括号可转载 2021-01-23 17:15:37 · 630 阅读 · 0 评论 -
Learning Linux(2)-Petalinux(1)
zz转载 2021-01-22 10:23:20 · 626 阅读 · 0 评论 -
Learning Linux(1)-Based On Zynq SoC
一、概论Zynq作为一个片上系统,其PS部分集成了2个ARM Cortex A9的硬核,使得此硬件系统可以运行Linux系统内核。在这个过程中ARM Cortex A9的MMU(Memory Managment Unit,内存管理单元)发挥了重要作用,简单概括来说它的功能之一是负责了虚拟地址到物理地址的映射和转换,这对于现代的多用户多进程操作系统而言是十分必要的。MMU的存在使得Zynq上运行Linux系统内核成为可能。作为对比,在一些常见的MCU(ARM Cortex M3.etc,它们不含MMU)原创 2021-01-08 09:38:42 · 154 阅读 · 0 评论