
LINUX
文章平均质量分 90
风雨田
举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
进程间通信---共享内存
一、IPC(Inter-Process Communication,进程间通信)对象的介绍System V 的IPC对象有共享内存、消息队列、信号灯。注意:在IPC的通信模式下,不管是使用消息队列还是共享内存,甚至是信号灯,每个IPC的对象都有唯一的名字,称为"键"(key)。通过"键",进程能够识别所用的对象。"键"与IPC对象的关系就如同文件名称于文件,通过文件名,进程能够读写文件内的数据,甚原创 2016-04-01 15:26:00 · 722 阅读 · 0 评论 -
进程间通信--信号(进程间通信唯一的异步方式)
一、信号的介绍信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式。信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了那些系统事件。如果该进程当前并未处于执行态,则该信号就由内核保存起来,直到该进程恢复执行再传递个它;如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞取消时才被传递给进程。二、linux操作系统支持的信号A. kill原创 2016-04-01 15:26:09 · 1320 阅读 · 0 评论 -
linux 进程(二) --- 进程的创建及相关api
一、进程的创建fork()函数 由fork创建的新进程被称为子进程(child process)。该函数被调用一次,但返回两次。两次返回的区别是子进程的返回值是0,而父进程的返回值则是 新子进程的进程ID。将子进程ID返回给父进程的理由是:因为一个进程的子进程可以多于一个,所有没有一个函数使一个进程可以获得其所有子进程的进程ID。fork使子进程得到返回值0的理由是:一个进程只会有一个父进程,所以原创 2016-04-01 15:26:12 · 852 阅读 · 0 评论 -
linux 标准IO缓冲机制探究
一、什么是缓存I/O(Buffered I/O)缓存I/O又被称作标准I/O,大多数文件系统默认I/O操作都是缓存I/O。在Linux的缓存I/O机制中,操作系统会将I/O的数据缓存在文件系统的页缓存(page cache)中,也就是说,数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。1.缓存I/O有以下优点:A.缓存I/O使用了操作系统内核缓冲区,原创 2016-04-01 15:26:15 · 602 阅读 · 0 评论 -
Linux 原始套接字--myping的实现
一、套接字的类型A.流套接字(SOCK_STREAM) 用于提供面向连接、可靠的数据传输服务,其使用传输层的TCP协议B.数据报套接字(SOCK_DGRAM)用于提供一个无连接、不可靠的服务,其使用传输层上的UDP协议C.原始套接字(SOCK_RAM)原始套接字是相对表中套接字(即前面两种套接字)而言的。它与标准套接字的区别是原始套接字可以读写内核没有处理的IP数据包,流套接字只能读取TCP协议的原创 2016-04-01 15:26:28 · 663 阅读 · 0 评论 -
【转】linux网络编程——套接字(socket)入门
1.套接字的基本结构struct sockaddr这个结构用来存储套接字地址。数据定义:struct sockaddr {unsigned short sa_family; /* address族, AF_xxx */char sa_data[14]; /* 14 bytes的协议地址 */};sa_family 一般来说,都是“AFINET”。sa_data ...转载 2016-04-01 15:26:36 · 896 阅读 · 0 评论 -
Linux进程间通信——消息队列:
一、什么是消息队列 消息队列提供了 一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列 与命名管道一样,每个数据块都有一个最大长度的限制。 Linux用宏MSGMAX和MSGMNB来限制一条消原创 2016-04-01 15:26:54 · 542 阅读 · 0 评论 -
linux内核——进程管理
在讲进程之前先说一下进程的堆栈的吧: 1.进程的堆栈 内核在创建进程的时候,在创建task_struct的同时,会为进程创建相应的堆栈。每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存在于内核空间。当进程在用户空间运行时,cpu堆栈指针寄存器里面的内容是用户堆栈地址,使用用户栈;当进程在内核空间时,cpu堆栈指针寄存器里面的内容是内核原创 2016-04-01 15:27:04 · 694 阅读 · 0 评论 -
(原创)socket学习实验(一)——利用C 语言socket抓取一个网页内容
(纯手打,有问题可以交流)最近在学习socket,然后做了一些小的实验,发现socket功能还真是强大,对于socket流使套接字在某种程度上其实是与终端的telnet相似的,IP地址对应socket里的sock地址,端口对应sock里的端口,然后就看自己在终端里发送命令,就如同利用socket的send和recv方法了,我在终端上测试一个telnet,获取一个网页的内容:~:teln原创 2016-04-01 15:27:06 · 1199 阅读 · 0 评论 -
Linux 同步方法剖析--内核原子,自旋锁和互斥锁
在学习 Linux® 的过程中,您也许接触过并发(concurrency)、临界段(critical section)和锁定,但是如何在内核中使用这些概念呢?本文讨论了 2.6 版内核中可用的锁定机制,包括原子运算符(atomic operator)、自旋锁(spinlock)、读/写锁(reader/writer lock)和内核信号量(kernel semaphore)。 本文还探讨了每种机制...转载 2016-04-01 15:27:09 · 812 阅读 · 0 评论 -
Linux网络编程:原始套接字的魔力【上】
基于原始套接字编程 在开发面向连接的TCP和面向无连接的UDP程序时,我们所关心的核心问题在于数据收发层面,数据的传输特性由TCP或UDP来保证: 也就是说,对于TCP或UDP的程序开发,焦点在Data字段,我们没法直接对TCP或UDP头部字段进行赤裸裸的修改,当然还有IP头。换句话说,我们对它们头部操作的空间非常受限,只能使用它们已经开放给我们的诸如源、目的IP,原创 2016-04-01 15:25:57 · 713 阅读 · 0 评论 -
多线程编程
一、线程的基本概念 进程(process)和文件(files)是unix/linux操作系统两个最基本的抽象。进程是处于执行期的程序和它所包含的资源的总和,也就是说一个进程就是处于执行期的程序。一个线程(thread)就是运行在一个进程上下文中的一个逻辑流,不难看出,线程是进程中最基本的活动对象。 在传统的系统中,一个进程只包含有一个线程。但在现代操作系统中,允许一个进程里面可原创 2016-04-01 15:25:51 · 542 阅读 · 0 评论 -
Linux启动过程详解
启动第一步--加载BIOS当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。启动第二步--读取MBR众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是Master B...转载 2016-04-01 15:25:07 · 432 阅读 · 0 评论 -
linux内核启动过程学习总结
通用寄存器的作用r0 :在函数开始时使用r1 :存放堆栈指针,相当于ia32架构中的esp寄存器r2 :存放当前进程的描述符的地址r3 :存放第一个参数和返回地址r4-r10 :存放函数的参数r11 :用在指针的调用和当前一些语言的环境指针r12 :用于存放异常处理r13 :保留做为系统线程IDr14-r31 :作为本地变量,具有非易失性Linux启动过程描述第一步:使用Boot ...转载 2016-04-01 15:25:10 · 839 阅读 · 0 评论 -
[原创]Linux系统启动过程分析
经过对Linux系统有了一定了解和熟悉后,想对其更深层次的东西做进一步探究。这当中就包括系统的启动流程、文件系统的组成结构、基于动态库和静态库的程序在执行时的异同、协议栈的架构和原理、驱动程序的机制等等。 本人在综合了现有网上大家智慧的基础上,结合对2.6.32的内核代码的研读,基于CentOS 6.0系统对Linux的启动流程做了些分析。由于才疏学浅,知识所限,有些地方原创 2016-04-01 15:25:13 · 759 阅读 · 0 评论 -
do_initcall解析
老大提了新需求: 板子上2个PCI网卡,2个CPU自带TSEC; 要求TSEC对应 eth0,eth1, PCI网卡对应 eth2,eth3网络设备的注册是由register_netdev(struct net_device *dev)来实现的网络设备驱动加载的时候,会调这个函数,到时就会确定网络设备的接口名称为 eth1或2或3...在设备驱动代码里强行指定设备接口名?麻烦,改的地方原创 2016-04-01 15:25:16 · 841 阅读 · 0 评论 -
Linux开机启动过程详细分析
开机过程指的是从打开计算机电源直到LINUX显示用户登录画面的全过程。分析LINUX开机过程也是深入了解LINUX核心工作原理的一个很好的途径。 启动第一步--加载BIOS 当 你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关 信息、设备启动顺序信息、硬盘信息、内原创 2016-04-01 15:25:18 · 562 阅读 · 0 评论 -
Linux的i2c驱动详解
目录(?)[-] 简介 架构 设备注册 I2C关键数据结构和详细注册流程 关键数据结构 详细注册流程 使用I2C子系统资源函数操作I2C设备 Gpio模拟i2c总线的通用传输算法 总结原创 2016-04-01 15:25:21 · 1373 阅读 · 0 评论 -
设备模型之kobject,kset及其关系
设备驱动基础0:设备模型之kobject,kset及其关系 Linux2.6以后的设备驱动,都是在设备模型的基础上构建的,因此,要编写linux下的设备驱动程序,不论是usb设备,pci设备等,都需要了解设备模型。设备模型的基础结构体主要是kobject,kset这两个结构体:struct kobject { char * k_name; char原创 2016-04-01 15:25:36 · 714 阅读 · 0 评论 -
Linux内核源码分析--内核启动之(5)Image内核启动(rest_init函数)(Linux-3.0 ARMv7)
前面粗略分析start_kernel函数,此函数中基本上是对内存管理和各子系统的数据结构初始化。在内核初始化函数start_kernel执行到最后,就是调用rest_init函数,这个函数的主要使命就是创建并启动内核线程init。这个函数虽然意思为剩下的初始化,但是这个“剩下”的可是内容颇多,下面详细分析如下:/* * 我们必须确定在一个非__init函数或 * 其他根线程(root thread原创 2016-04-01 15:25:39 · 710 阅读 · 0 评论 -
Linux环境进程间通信(一):管道及有名管道
在本系列序中作者概述了 linux 进程间通信的几种主要手段。其中管道和有名管道是最早的进程间通信机制之一,管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。 认清管道和有名管道的读写规则是在程序中应用它们的关键,本文在详细讨论了管道和有名管道的通信机制的基础上,用实例对其读写规则进行了程序验证,这样做有利于增强读原创 2016-04-01 15:25:48 · 476 阅读 · 0 评论 -
msgrcv error : Identifier removed(ERMID)错误解决;
今天在学习进程间通信中的消息队列的时候,自己的一个例子经常出现msgrcv error : Identifier removed这个错误,网上找了,发现好多人都与到过这问题,但是并没又给初一个明确的解决办法;后来终于给找出来了,原来是类型的问题:#include #include #include #include #include #include原创 2016-04-01 15:26:44 · 5395 阅读 · 0 评论