Linux系统
文章平均质量分 68
ChrisYoung1314
这个作者很懒,什么都没留下…
展开
-
Linux基础知识全面总结
学习Linux系统的重要性应该不用多说,下面我就对Linux的基础知识进行一个全面而又简单的总结。不过建议大家还是装个Linux系统多练习,平时最好只在Linux环境下编程,这样会大有提高。 linux的特点 - 免费的/开源 - 支持多线程/多用户 - 安全性好 - 对内存和文件管理优越 关机命令 shu原创 2015-08-09 09:49:18 · 26168 阅读 · 8 评论 -
Linux编程——文件 IO操作
Linux文件 I\O 介绍 1. Linux系统调用 Linux系统调用(system call)是指操作系统提供给用户程序的一组“特殊接口”,用户程序可以通过这组“特殊”接口来获得操作系统提供的特殊服务。 为了更好的保护内核空间,将程序的运行空间分为内核空间和用户空间,他们运行在不同的级别上,在逻辑上是相互隔离的。在Linux中,用户程序不能直接访问内核提供的服务原创 2015-08-21 08:15:21 · 4399 阅读 · 0 评论 -
Vim编辑器——入门学习
vim模式介绍 以下介绍内容来自维基百科:从vi演生出来的Vim具有多种模式,这种独特的设计容易使初学者产生混淆。几乎所有的编辑器都会有插入和执行命令两种模式,并且大多数的编辑器使用了与Vim截然不同的方式:命令目录(鼠标或者键盘驱动),组合键(通常通过control键(CTRL)和alt键(ALT)组成)或者鼠标输入。Vim和vi一样,仅仅通过键盘来在这些模式之中切换。这就使得Vim可原创 2015-08-20 16:30:05 · 917 阅读 · 0 评论 -
Linux编程——Makefile 使用
在先前的文章中,我们已经学习了 gcc 和 gdb 的使用。本节,我们将介绍 Makefile 的使用。Makefile带来的好处就是——“自动化编译”,一但写好,只需要一个 make 命令,整个工程便可以完全编译,极大的提高了软件的开发效率(特别是对于那些项目较大、文件较多的工程)。 make是一个命令工具,最主要也是最基本的功能就是根据makefile文件中描述的源程序至今的相互关系原创 2015-08-20 12:24:20 · 989 阅读 · 0 评论 -
Linux编程——GCC的使用
工欲善其事, 必先利其器。而gcc是Linux系统下最常见的编辑器,本文学习gcc 编译器的使用。 gcc 支持编译的一些源文件后缀名 gcc 编译程序的流程 Linux的可执行文件并没有像 Windows 那样有明显的.exe后缀名, 只需向其分配x(可执行)权限即可 sudo chmod +x excutefile 作为原创 2015-08-19 16:08:53 · 1487 阅读 · 2 评论 -
Linux内核——伙伴系统和slab缓存
本节,我将介绍linux系统物理内存分配时所用到的技术——伙伴系统和slab缓存。 伙伴系统 使用场景:内核中很多时候要求分配连续页,为快速检测内存中的连续区域,内核采用了一种技术:伙伴系统。 原理:系统中的空闲内存总是两两分组,每组中的两个内存块称作伙伴。伙伴的分配可以是彼此独立的。但如果两个小伙伴都是空闲的,内核将其合并为一个更大的内存块,作为下一层次上某个内存块原创 2015-08-03 21:01:02 · 2167 阅读 · 0 评论 -
Linux编程——gdb调试
上一篇文章中,我们学习了gcc编译器的使用。本文,我们就讲解 gdb 调试器(Debug)的使用,它可以帮助我们找出程序之中的错误和漏洞等等。 当程序编译完成后,它可能无法正常运行;或许程序会彻底崩溃;或许只是不能正常地运行某些功能;或许它的输出会被挂起;或许不会提示要求正常的输入。无论在何种情况下,跟踪这些问题,特别是在大的工程中,将是开发中最困难的部分,我们将学习gdb(GNU de原创 2015-08-19 17:51:03 · 970 阅读 · 0 评论 -
Linux编程——多进程程序设计
本文学习Linux环境下的多进程编程,在我之前的文章里已经讲过进程与线程。本文,再简单讲一下进程的概念,方便接下来的学习。 进程定义:进程是一个具有一定独立功能的程序的一次运行活动。 进程状态图:原创 2015-09-01 15:18:13 · 1231 阅读 · 0 评论 -
malloc实现原理
malloc是怎样实现的呢?答案就是:可以基于伙伴系统实现(关于伙伴系统在之前的文章里面已经讲过),也可以使用基于链表的实现 。 它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表 调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分原创 2015-08-06 13:40:39 · 1053 阅读 · 0 评论 -
Linux进程内存空间分段
Linux的内存空间简单可以分为5个部分: Text(代码区):存放可执行的指令操作,其只读不能写 Bss(静态区or全局区):存放未初始化的全局变量和静态变量 Data(数据区):存放初始化的全局变量和静态变量 Stack:存放临时变量,函数参数等 Heap:存放new/malloc等动态申请的变量,用户必须手动进行delete/free操作。 其中Stac原创 2015-08-06 13:57:25 · 2711 阅读 · 0 评论 -
操作系统——死锁
本文我们全面学习一下死锁问题。 死锁概念:由于竞争资源或者通信关系,两个或更多线程在执行中出现,永远相互等待只能由其他进程引发的事件原创 2015-08-14 13:05:51 · 923 阅读 · 0 评论 -
Linux进程fork,exec,vfork详解
在Unix/Linux系统下进程创建时需要进行如下系统调用:fork/exec fork()把一个进程复制成二个进程:parent (old PID), child (new PID) exec()用新程序来重写当前进程:PID没有改变 接下来就重点学习这两个系统调用: 当我们fork() 创建一个继承的子进程将会发生如下事情:复制父进程的所有变量和内存,复原创 2015-08-13 16:03:25 · 1959 阅读 · 0 评论 -
操作系统——进程与线程
进程的定义:进程是指一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程 进程的特点 动态性:可动态地创建、结束进程 并发性:多个进程可并发执行 独立性:进程可以被独立调度并占用处理机运行 制约性:不同进程的工作不相互影响,但是可能因访问共享数据/资源或进程间同步而产生制约 进程的地址空间如下图所示: 进程的原创 2015-08-13 08:51:51 · 1263 阅读 · 0 评论 -
操作系统——页面置换算法详解
页面置换算法的功能:当出现缺页异常,需调入新页面而内存已满时,置换算法选择被置换的物理页面。 页面置换算法的设计目标:尽可能减少页面的调入调出次数,把未来不再访问或短期内不访问的页面调出。 接下来,我们介绍几种常用的页面置换算法: 先进先出算法(First-In First-Out, FIFO) 思路:选择在内存驻留时间最长的页面进行置换 实现:维原创 2015-08-11 09:51:56 · 25365 阅读 · 0 评论 -
vfork 挂掉的一个问题
在知乎上,有个人问了这样的一个问题——为什么vfork的子进程里用return,整个程序会挂掉,而且exit()不会?并给出了如下的代码,下面的代码一运行就挂掉了,但如果把子进程的return改成exit(0)就没事。 我受邀后本来不想回答这个问题的,因为这个问题明显就是RTFM的事,后来,发现这个问题放在那里好长时间,而挂在下面的几个答案又跑偏得比较严重,我觉得可能有些朋友看到那样的答转载 2015-08-24 15:58:04 · 535 阅读 · 0 评论 -
操作系统——中断、异常和系统调用比较
我们首先要明确,为什么操作系统需要中断、异常和系统调用: 在计算机运行时,内核是被信任的第三方 只有内核才可以执行特权指令 方便应用程序 接下来我们先简单了解一下三者的概念: 系统调用(system call) 应用程序主动向操作系统发出的服务请求 异常(exception) 非法指令或者其他原因导原创 2015-08-09 14:09:51 · 15014 阅读 · 0 评论 -
TCP/IP协议族概述
TCP/IP协议的体系结构TCP/IP协议族四层模型和OSI七层模型 OSI七层模型原创 2015-10-29 21:17:15 · 1487 阅读 · 0 评论