linux
文章平均质量分 54
_Mr_COOL
这个作者很懒,什么都没留下…
展开
-
地址/数据/控制总线原理讲解
选自王爽《《汇编语言》》 一个cpu有n跟地址线,则可以说这个cpu的地址总线的宽度为n,这样的cpu最多可以寻找2的n次方内存单元。图中展示了10根地址线的cpu向内存发出地址信息11时10根地址线上传送的二进制信息。 cpu与内存或其他器件之间的数据传送是通过数据总线来进行的。数据总线的宽度决定转载 2015-10-18 10:21:46 · 2426 阅读 · 0 评论 -
一次read()系统调用在内核中的处理过程
部分程序员可能会有这样的疑问:当在程序中调用库函数 read 时,这个请求是经过哪些处理最终到达磁盘的呢,数据又是怎么被拷贝到用户缓存区的呢?本文介绍了从 read 系统调用发出到结束处理的全过程。该过程包括两个部分:用户空间的处理、核心空间的处理。用户空间处理部分是系统调用从用户态切到核心态的过程。核心空间处理部分则是 read 系统调用在 linux 内核中处理的整个过程。Read 系统调用在用转载 2015-10-12 18:17:36 · 3807 阅读 · 0 评论 -
wait_event_interruptible()与wake_up()的使用
wake_up() wait_event_interruptible()转载 2015-10-13 11:17:07 · 584 阅读 · 0 评论 -
copy_to_user()分析
在内核的学习中会遇到很多挺有意思的函数,而且能沿着一个函数扯出来很多个相关的函数。copy_to_user和copy_from_user就是在进行驱动相关程序设计的时候,要经常遇到的两个函数。由于内核空间与用户空间的内存不能直接互访,因此借助函数copy_to_user()完成用户空间到内核空间的复制,函数copy_from_user()完成内核空间到用户空间的复制。下面我们来仔细的理一下这两个函转载 2015-10-13 18:31:55 · 3994 阅读 · 2 评论 -
linux 信号与软中断
linux信号机制详细解析转载 2015-10-15 14:49:06 · 1006 阅读 · 0 评论 -
makefile中的CFLAGS与LDFLAGS
在configure时我们经常会遇到明明已经指令了目录但有时就是链接不了的情况,解决方法及原因如下(引用自http://www.cnblogs.com/taskiller/archive/2012/12/14/2817650.html)CFLAGS: 指定头文件(.h文件)的路径,如:CFLAGS=-I/usr/include -I/path/include。同样地,安装一个包时会在安装路径下建立一转载 2016-01-21 16:18:07 · 994 阅读 · 0 评论 -
GCC 编译详解 (转)
GNU CC(简称为Gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。Gcc不仅功能强大,而且可以编译如C、C++、Object C、Java、Fortran、Pascal、Modula-3和Ada等多种语言,而且Gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。转载 2016-01-21 20:09:52 · 961 阅读 · 0 评论 -
总结configure,pkg-config和PKG_CONFIG_PATH
我想大家都在linux下用源码安装过软件,源码安装软件的第一步是啥?下载源码,没错,小王,你太有才了.. 其实真正的第一步是./configure.似曾相识哦。没错,那么我也时常见过pkg-config及pkg_config_path.这几这到底啥关系呢,这就是今天的主题。 1.什么是configure configure会根据传入的配置项目检查程序编译时所依赖的环境以及对程序编译安装进行配置转载 2016-01-21 20:30:32 · 356 阅读 · 0 评论 -
./configure,make,make install的作用
这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤。./configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。 make是用来编译的,它从Makefile中读取指令,然后编译。 make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。AUTOMAKE和转载 2016-01-22 10:47:00 · 301 阅读 · 0 评论 -
对端口的理解
在Internet上,各主机间通过TCP/TP协议发送和接收数据报,各个数据报根据其目的主机的ip地址来进行互联网络中的路由选择。可见,把数据报顺利的传送到目的主机是没有问题的。问题出在哪里呢?我们知道大多数操作系统都支持多程序(进程)同时运行,那么目的主机应该把接收到的数据报传送给众多同时运行的进程中的哪一个呢?显然这个问题有待解决,端口机制便由此被引入进来。 本地操作系统会给那些有需求的进程转载 2016-04-15 16:02:18 · 649 阅读 · 0 评论 -
自旋锁(spin lock)与互斥量的区别
自旋锁(spin lock)与互斥量(mutex)的比较自旋锁是一种非阻塞锁,也就是说,如果某线程需要获取自旋锁,但该锁已经被其他线程占用时,该线程不会被挂起,而是在不断的消耗CPU的时间,不停的试图获取自旋锁。互斥量是阻塞锁,当某线程无法获取互斥量时,该线程会被直接挂起,该线程不再消耗CPU时间,当其他线程释放互斥量后,操作系统会激活那个被挂起的线程,让其投入运行。两种锁适用转载 2015-10-13 11:39:18 · 6328 阅读 · 0 评论 -
文件描述符与文件对象的关系
转载请说明出处:http://blog.csdn.net/cywosp/article/details/38965239概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通转载 2015-10-26 15:36:56 · 3236 阅读 · 0 评论 -
内存管理图解---------页目录表 页表
页目录和页表结构 收藏 上图反映了如下信息:1、 进程的4G 线性空间被划分成三个部分:进程空间(0-3G)、内核直接映射空间(3G – high_memory)、内核动态映射空间(VMALLOC_START - VMALLOC_END)2、 三个空间使用同一张页目录表,通过 CR3 可找到此页目录表。但不同的空间在页目录表中页对应不同的项,因此互相不冲突3、转载 2015-10-21 00:21:56 · 3797 阅读 · 0 评论 -
详细讲解从用户空间申请内存到内核如何为其分配内存的过程
Linux内存管理摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法。力求从外到内、水到渠成地引导网友分析Linux的内存管理与使用。在本章最后,我们给出一个内存映射的实例,帮助网友们理解内核内存管理与用户内存管理之间的关系,希望大家最终能驾驭Linux内存管理。前言内存管理一向是所有操作系统书籍不惜笔墨转载 2015-10-21 11:24:08 · 14210 阅读 · 2 评论 -
Linux 内存分区管理
inux内核中和内存相关的2个系统参数的设置:想要通过修改linux内存管理相关的参数设置来观察其对内存数据库的读写性能的影响,首先要了解一些linux内存管理相关的重要参数,先了解两个,如下。介绍一些前提基础:在非一致性内存访问(NUMA)情况下,CPU访问不同位置的内存,代价是不一样的。在多CPU情况下,对每个CPU来说都有本地内存和远端内存之分,访问本地内转载 2015-10-20 11:18:50 · 1962 阅读 · 0 评论 -
linux虚拟地址空间你真的理解了吗?
学了很久linux内核了,但对于linux内核对于内存管理这块始终有许多疑问,学而不思则罔!看了许多书籍和博客但还是没有搞得很明白。今天仔细思考了为什么需要虚拟内存的问题,突然觉得很有收获,所以记下来和大家分享,也是为了给自己留下更深刻的印象!1.理解进程使用的全部资源是’虚拟‘的,我们知道我们编写的应用程序最终要以进程的形式来运行,因而进程就相当于一个虚拟机(虚拟的计算机),所以我们很容易感原创 2015-10-20 17:19:41 · 7087 阅读 · 0 评论 -
Linux 内核空间与用户空间
Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。Linux内核地址映射模型x86 CPU采用了段页式地址映射模型。进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存。段页式机制如下转载 2015-10-20 17:40:32 · 555 阅读 · 0 评论 -
理解内存节点与内存分区
UMA和NUMA:UMA(Uniform Memory Access),即一致性内存访问。这种情况下,CPU访问内存的任何位置,代价都是一样的。NUMA)(Non Uniform Memory Access),即非一致性内存访问。这种情况下,CPU访问不同位置的内存,代价是不一样的。在多CPU情况下,对每个CPU来说有本地内存和远端内存,访问本地内存的代价比访问远端内存的代价小。确保CPU转载 2015-10-21 00:49:12 · 2642 阅读 · 0 评论 -
线程间的内存共享问题----你弄懂了吗?
对线程间共享内存的问题,许多同学是不是都觉得很简单?就是用全局变量来共享码,然而你说的并没有什么卵用…….(^__^)……. 对于线程间内存关系不弄得清清楚楚,很难写好多线程程序。最简练而精准的话来形容线程间共享内存:同一个线程组内线程间共享虚拟内存(自己通过实验总结的,然而不久以后发现一本书中(linux设备驱动程序)早就说过了,我读书好少啊O(∩_∩)O哈哈~) 虚拟内存没弄懂,就看看相关资原创 2015-10-08 16:09:33 · 16660 阅读 · 0 评论 -
异步、同步与阻塞、非阻塞的区别
以前对异步和同步总是理解不好,最近看了一些文章,总算把他们的关系弄明白了。 阻塞、非阻塞是描述在同一个进程执下行一个函数调用的,异步和同步是描述两个功能模块的关系的、 阻塞当我们是执行某个系统调用时,当我们是执行某个系统调用时,进程被挂起。 非阻塞当我们是执行某个系统调用时,当我们是执行某个系统调用时,进程并不被挂起,他会执行另一个操作。 具体示例以后再举出来吧,今天很忙!!!原创 2015-10-08 15:34:36 · 373 阅读 · 0 评论 -
进程间共享文件描述符
进程间传递文件描述符unix一个传统的服务器模型就是一连接一进程模型。进程对地址空间的保护作用是显而易见的,为某个连接服务的进程出现错误导致崩溃,其它的进程还能正常的运行。但是,当连接数大时,创建过多的进程显然会影响效率。那么启动一系列的进程,每个进程都利用epoll为多个连接服务,不是就可以避免创建过多的进程,同时也利用到了进程地址空间保护的优势了吗?但是还有一个问题,我们不能为每一个进程都创建一转载 2015-10-26 15:30:01 · 2165 阅读 · 0 评论 -
accpet 返回的描述符理解
socket accept()返回的socket描述符的端口和listen描述符端口是一样的吗?as you know,一个socket是由一个五元组来唯一标示的,即(协议,server_ip, server_port, client_ip, client_port)。只要该五元组中任何一个值不同,则其代表的socket就不同。这里忽略协议的区别,在同一协议的基础上,服务器端的listen sock转载 2017-05-04 10:42:57 · 809 阅读 · 0 评论