您的位置:首页 > 运维架构 > Linux

linux程序设计:第七章 数据管理

2016-09-23 15:24 211 查看
一. 内存管理

 1.简单的内存分配

使用标准c语言函数库中的malloc调用来分配内存。

    void * malloc(size_t size)

返回的是一个void*指针,因此需要通过类型转换。可以保证其返回的内存是地址对齐的,因此可以将其转换成任何类型的指针。

2.分配大量的内存

    应用程序所需的内存是由linux内核管理的。刚开始,内核只是通过使用空闲的物理内存来满足应用程序的内存需求,但是当物理内存耗尽时,就开始使用交换空间。交换空间是安装系统时分配的独立的磁盘区域。

    内核会在物理内存和交换空间之间移动数据和程序代码。Linux实现了一个按需换页的虚拟内存系统。

3.释放内存

   动态使用内存的程序总是通过free调用,把不用的内存释放给malloc内存管理器。

void free (void * memory)

二.文件锁定

1. 创建锁文件

    以原子操作的方式创建锁文件。锁文件只是建议锁而不是强制锁。open系统调用并带上0_CREAT和O_EXCL标志。

2.区域锁定

    锁文件用来对资源的独占式访问。并不适合于访问大型的共享文件。

int fcntl ( int fildes,int command,...)

command选项:

F_GETLK  获取fileds打开的文件的锁信息,不会尝试去锁定文件。

F_SETLK 尝试对fileds指向的文件的某个区域加锁或解锁。

F_SETLKW 无法获取锁时,这个调用会一直等待到可以为止。

    当对文件区域加锁之后,必须使用底层的read和write调用来访问文件中的数据,而不要使用更高级的fread和fwrite调用,因为他们会对读写的数据进行缓存。

有三种类型的锁:文件中的每一个字节任一时刻只能拥有一种类型的锁。

F_FDLCK  共享(读)锁

F_UNLCK 解锁或用来清除锁

F_WRLCK 独占(写)锁  

3. 死锁

    是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: