![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
系统(Linux)
文章平均质量分 69
__Lemon__
这个作者很懒,什么都没留下…
展开
-
简述程序与进程
以前,一直觉得程序很奇妙,代码经过编译之后运行,变为进程,执行想得到想要的效果。 最近,浏览了一下linux0.11内核源码,对程序和进程有了新的认识。 程序本不会直接变为进程,代码经编译后变为包含链接信息、段信息的可执行的二进制文件。程序只不过是一串可以执行的指令而已。 当我们在控制台下运行./a.out,操作系统便创建一个当前shell的的子进程,这个新进程实际上原创 2014-05-21 15:55:56 · 1017 阅读 · 0 评论 -
静态库、共享库和动态加载库
在Linux C/C++中,使用库的方式有3中:1.静态库1).创建object文件: gcc -c lib_c.c -o mylib.o (the -c option says not to run the linker. ) 输出为lib_h.o2).创建后缀为.a的静态库: ar rcs mylib.a mylib.o 其中a原创 2015-04-15 12:30:58 · 1903 阅读 · 0 评论 -
I/O小总结1
对于一块芯片,I/O和中断时必不可少的。在OS中,I/O的概念很多,很杂;很难全部记清楚。I/O是CPU与外设(包括内存、硬盘、键盘、鼠标、打印机等)之间通信的桥梁。 在linux中,一切都是文件,所以linux下I/O编程一般都是针对文件编程。I/O大致可分为三类:1.对系统指定的标准设备的输入和输出;即从键盘输入数据,输出到显示器屏幕;称为为标准I/O.2.以外存磁盘文原创 2014-07-03 18:09:40 · 945 阅读 · 0 评论 -
分页基本原理(linux0.11)
我们都知道CPU寻址过程是:逻辑地址-(分段)->线性地址-(分页)->物理地址。 逻辑地址由段选择符和段偏移地址两部分组成;可以通过段选择符在段描述符表中找到段基地址,段基地址+段偏移地址=线性地址。 在32位CPU架构中,MMU使用的是平坦内存模型,即所有的段基地址都是0,所以逻辑地址可以很容易在分段过程中过渡到线性地址。 分页的主要作用就是将线性地址转化为物理原创 2014-12-15 16:05:35 · 1757 阅读 · 0 评论 -
常见段错误
在Linux内存管理中,Linux结合了CPU架构采用了分段机制;分段就是将内存分成大小不同的段空间,将进程之间和进程内部不同数据段之间隔离起来;当程序内存的数据的访问超出了系统所给这个程序数据段的范围,系统就会给进程发送一个信号SIGSEGV,程序将终止退出。所以,可以说段错误都是对内存操作错误引起的。这里列举了常见的段错误:1.访问不存在的内存、访问未知的受保护的内存;原创 2014-10-20 14:40:08 · 2973 阅读 · 0 评论 -
*.map文件
关于linux程序的map文件,网络上资料很少,大概看了下map文件,虽然理解的不是很透彻,但是还是对程序的编译、运行、内存分配有了一点新的认识。 1)map文件是程序的全局符号、源文件和代码行号信息的唯一的文本表示方法,是整个程序工程信息的静态文本,通常由linker生成。(抄至网络) map文件保存整个工程的静态文本信息,里面有所有函数的入口地址。 通过查看map文件,我原创 2014-11-05 14:10:52 · 9208 阅读 · 0 评论 -
逻辑地址
在内存管理中,逻辑地址是一个比较难以理解的概念,因为逻辑地址是逻辑上(思想上的,空间上)的概念,并非物理存在,很难想象出逻辑地址到底是什么样的。 在理解逻辑地址的时候,我曾有一个疑问:假如一个操作系统最多支持64个进程,每个进程的线性地址空间为4G(32位CPU的寻址范围),那么总共需要的的内存是4G*64,这么大的内存存储在哪儿呢?现在,我对这个困惑的解释是:CPU是分时处理的,当时间片原创 2014-11-12 19:43:30 · 5116 阅读 · 0 评论 -
理解linux0.11加载过程
阅读linux0.11源码Boot部分很多次了,每次看着看着就晕了,主要是因为对X86芯片和汇编不熟悉;虽然赵炯博士的>讲的非常详细,网上资料也很多,但毕竟不是自己的东西,只有用自己的思维理解了才会记忆深刻。我就试着用自己的思路,也小结一下。0. 加载步骤: Bois->bootsect.s->setup.s->(head.s->main.c)。(head.s->main.c合为system模原创 2014-09-28 17:32:25 · 1556 阅读 · 2 评论 -
linux0.11文件系统学习小结
大概浏览了一下linux0.11文件系统,感觉逻辑比较复杂(程序之间的层次并不十分清晰,相互调用很多),很难一时理解的透彻,只能阶段性的描述下自己的感受。我读linux0.11源码参考的是>和>,这两本书都详细的讲解了源码,但是只有理解了才能变成自己的东西。linux0.11版本虽然比较老,但还是可以有助于理解OS原理。文件操作为计算机运算提供了最关键的数据支持,理解了文件系统,才能更好的原创 2014-09-10 10:38:23 · 1617 阅读 · 0 评论 -
多线程小结1
在早期的linux中,只有进程,没有线程。进程是一个可执行程序的实体,由私有虚拟地址空间、代码、数据和其他操作系统资源(如进程创建的文件、管道、同步对象等)组成。此时的进程即是资源的拥有者,也是CPU的调度单位。进程之间即可相互独立,又可相互协作完成并发任务。但是多进程的协作有以下缺点:创建、销毁、切换速度慢,内存、资源占用大。在对OS性能要求越来越高(大量数据接入、需要快速响应)原创 2014-07-15 15:20:51 · 878 阅读 · 0 评论 -
守护进程
一个进程主要关系有: 会话组、进程组、父子进程关系等。通常,在同一控制台下执行、运行的程序属于同一会话组;父子进程属于同一进程组;一个会话组可包含多个进程组。守护进程(精灵进程),顾名思义,就像护花使者一个样在背后默默支持着他的花儿;也像父亲一直保卫着,守护着孩子们的成长,当一个进程成为孤儿进程之后,再改变此孤儿进程的会话组、进程组,然后再赋予它特殊使命(在后台孜孜不倦的完成莫特定功原创 2014-06-19 16:47:53 · 899 阅读 · 0 评论 -
fork应用
在linux中,通常使用fork(还有vfork, clone)创建一个新的进程。 fork是一个“非一般”的函数,调用1次,返回2次;fork之后,1个进程就变成了2个进程,子进程是父进程的拷贝,它们具有相同的数据;父进程的文件描述符也会拷贝一个给子进程,父子进程的文件描述符指向同一个文件(file结构体的引用计数增加)。 在判断出父、子进程之前,它们会继续向原创 2014-06-18 18:17:24 · 1121 阅读 · 0 评论 -
对shell的理解
一直对shell的认识模棱两可,仔细查看了下linux下进程,有了近一步的理解。UID PID PPID C STIME TTY TIME CMDroot 1 0 0 Apr23 ? 00:00:00 init [5] root 2780 1 0 Apr23 ? 00:00:0原创 2014-06-10 11:09:18 · 1824 阅读 · 0 评论 -
gprof
使用gprof寻找应用程序中占用时间最长的部分。(目前我还没有在大型系统中使用过gprof,依然觉得gprof是一个很好的工具,在这里只是做一个记号,有足够经验后再来详述)网络上关于gprof的资料很多,下面3个是总结的比较好的:http://www.ibm.com/developerworks/cn/linux/l-gnuprof.htmlhttp://blog.csdn.n原创 2016-07-05 13:29:17 · 783 阅读 · 0 评论