06 2012 档案

摘要:字节作为最小的可寻址的单位,而不是位bit。机器级程序将存储器看做一个非常大的数组,成为虚拟存储器。存储器的每个字节都由一个唯一的数字来标识,称为它的地址,所有可能的地址的集合就叫虚拟地址空间virtual address space。虚拟地址的主要目的就是展现给程序一个概念性的映像,将访问内存,磁盘,特殊硬件结合起来,为程序提供一个看上去统一的字节数组。 C编译器还把每个指针和类型信息联系起来,这样就可以根据指针的类型,生成不同的及其级代码来存储指针所指向的数据。尽管C编译器维护者这个类型信息,但是它生成的机器级程序并不在乎数据类型的信息。每个程序对象都可以简单视为一个字节块。 与变... 阅读全文
posted @ 2012-06-30 22:37 鼻子很帅的猪 阅读(324) 评论(0) 推荐(0)
摘要:对于总是想知道事情是如何运作的我,相信这本书能够解开我大多数的谜团。我相信,从程序员的角度去学习计算机系统是如何工作的会非常有趣。所以我会在博客上随时更新我阅读的笔记和心得。备忘吧。。。哈哈 总感觉记忆力不好~》~ 也希望能帮助一样有困惑的码农们。 阅读全文
posted @ 2012-06-29 00:13 鼻子很帅的猪 阅读(151) 评论(0) 推荐(0)
摘要:ioctl 函数本函数影响由fd 参数引用的一个打开的文件。#include<unistd.h>int ioctl( int fd, int request, .../* void *arg */ );返回0 :成功 -1 :出错第三个参数总是一个指针,但指针的类型依赖于request 参数。我们可以把和网络相关的请求划分为6 类:套接口操作文件操作接口操作ARP 高速缓存操作路由表操作流系统下表列出了网络相关ioctl 请求的request 参数以及arg 地址必须指向的数据类型:类别Request说明数据类型套接口SIOCATMARKSIOCSPGRPSIOCGPGRP是否位于 阅读全文
posted @ 2012-06-28 21:59 鼻子很帅的猪 阅读(259) 评论(0) 推荐(0)
摘要:1. 前言 使用ioctl系统调用是用户空间向内核交换数据的常用方法之一,从ioctl这个名称上看,本意是针对I/O设备进行的控制操作,但实际并不限制是真正的I/O设备,可以是任何一个内核设备即可。2. 基本过程 在内核空间中ioctl是很多内核操作结构的一个成员函数,如文件操作结构struct file_operations(include/linux/fs.h)、协议操作结构struct proto_ops(include/linux/net.h)等、tty操作结构struct tty_driver(include/linux/tty_driver.h)等,而这些操作结构分别对应各种内.. 阅读全文
posted @ 2012-06-28 21:58 鼻子很帅的猪 阅读(618) 评论(0) 推荐(0)
摘要:在客户端/服务器模型中,服务器端需要同时处理多个客户端的连接请求,此时就需要使用多路复用。 实现多路复用最简单的方法是采用非阻塞的方式套接字,服务器端不断的查询每一个套接字的状态,如果有数据到达则读出数据,如果没有数据到达则查看下一个套接字。这种方法虽然简单,但是轮询过程中浪费了大量的CPU时间,效率非常的低。 另一种方法是服务器进程并不主动的询问套接字的状态,而是向系统登记希望坚实的套接字,然后阻塞。当套接字上有事件发生时(如有数据到达),系统通知服务器进程告知那个套接字上发生了什么事件,服务器进程查询对应的套接字,并进行处理。在这种工作方式下,套接字上没有事件发生时,服务器进程不会... 阅读全文
posted @ 2012-06-26 23:56 鼻子很帅的猪 阅读(326) 评论(0) 推荐(0)
摘要:1 套接字地址结构struct sockaddr{ unsigned short sa_family;//地址类型 char sa_data[14]; //14字节的地址协议}sa_family表示套接字的协议族类型,对应于TCP/IP的协议该是AF_INET;与该结构体等价的另一个数据结构:sockaddr_in。struct sockaddr_in{ unsigned short sin_family; //地址类型 unsigned short sin_port ; //端口号 struct in_addr sin_addr ;//IP地址 unsigned char sin... 阅读全文
posted @ 2012-06-26 23:42 鼻子很帅的猪 阅读(452) 评论(0) 推荐(0)
摘要:Linux进程间通信主要方法有:管道,命名管道,消息队列,信号量,共享内存,还有信号和套接字Socket。下面先简单介绍下管道:半双工的通信方式,数据只能单方向流动,而且只能在父子进程间使用。数据只能由一个进程流向另一个进程(其中一个写管道,一个读管道),如果要进行全双工通信,需要建立两个管道。管道还有一些限制条件,比如管道的缓冲区大小是受限制的。管道所传送的是无格式的字节流,这就要求发送和接受方需要事先约定好数据的格式。管道的创建#include <unistd.h>int pipe(int fd[2])一端只能用于读,由文件描述符fd[0]表示。另一端只能写,由文件描述符fd[ 阅读全文
posted @ 2012-06-25 23:21 鼻子很帅的猪 阅读(290) 评论(0) 推荐(0)
摘要:POSIX标准定义了数据类型sigset_t来表示信号集。 sigprocmask函数 每一个进程都有一个信号屏蔽码,它规定了当前阻塞而不能递送给该进程的信号集。函数sigprocmask可以检测或者更改进程的信号屏蔽码。int sigprocmask(int how, const sigset_t * set, sigset_t * oldset);如果oldset为非空指针,则该进程之前的信号屏蔽码通过oldset返回。如果set为非空指针,则该函数将根据how来修改信号当前的屏蔽码,how的取值如下:(1)SIG_BLOCK:将进程新的信号屏蔽码设置成为当前信号屏蔽码和set指向信... 阅读全文
posted @ 2012-06-25 11:03 鼻子很帅的猪 阅读(164) 评论(0) 推荐(0)