evo

自强不息,厚德载物 ii 无人驾驶fans ^_^ Making others better! Making life better!

【Kernel】内存管理

1、概述内存管理是内核最复杂同时也最重要的一部分,具体包括内存中的物理内存页的管理,分配大块内存的伙伴系统,分配较小块内存的slab、slub和slob分配器,分配非连续内存块的vmalloc机制,以及进程的地址空间。 内核一般将处理器的虚拟地址空间分为用户空间和内核空间,在两个用户进程之间切换...

2018-02-23 09:22:44

阅读数:130

评论数:0

【Linux】深入解析Linux proc文件系统

在Linux上,proc是一个伪文件系统,提供了访问内核数据的方法,一般挂载在“/proc”目录,其中的大部分内容是只读的,挂载(mount)信息可能为:proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)proc文件系统支持如下挂载选...

2017-06-03 08:05:06

阅读数:4734

评论数:0

【Linux】Linux常识28问

1、什么是计算机?计算机种类多种多样,常见的如台式机、笔记本、一体机、移动电话等,甚至如GPS导航、门禁系统等,都是一种计算机,简单来说,计算机就是用来接受用户输入的指令与数据,经由CPU中央处理器的算术逻辑单元运算处理后,以输出或存储一定的信息。2、计算机由哪些部分组成?计算机由五大单元组成,它...

2016-11-20 21:52:37

阅读数:803

评论数:0

【IPC】Posix共享内存区与mmap内存映射

共享内存是一种IPC形式,与其它IPC机制如管道、消息队列等相比,数据不必在进程与内核间多次交换,进程间通信的速度更快。当共享内存区映射到共享它的进程的地址空间时,再加以一些同步控制,这些进程就可以进行数据传送了。mmap函数提供了内存映射功能,可以把一个文件或一个Posix共享内存区对象映射到调...

2016-03-30 19:56:23

阅读数:1865

评论数:0

【IPC】Posix信号灯

信号灯semaphore是一种进程间或者线程间的同步原语,有以下三种形式——Posix有名信号灯:使用Posix IPC名字标识,相关函数为sem_open/sem_close/sem_unlink,可用于进程或线程间的同步。 Posix基于内存的信号灯:存放在共享内存区中,相关函数为sem_i...

2016-03-23 18:33:29

阅读数:890

评论数:1

【IPC】 记录锁

记录锁控制函数fcntl,可用于有亲缘关系或无亲缘关系的进程间共享某个文件的读与写,共享文件通过文件描述符来访问,这种类型的锁通常在内核中维护,其唯一标识即fcntl函数调用进程的pid。先以一个例子说明进程间文件共享的问题。// nolock.c #include <stdio.h>...

2016-03-22 19:44:21

阅读数:606

评论数:0

【IPC】读写锁

读写锁是同步的又一种形式,与互斥锁不同,互斥锁同时只能被一个线程获取,而读写锁可以同时被多个线程获取读锁,这在一定程度上提高了程序的并发性,写锁也同样是只能被一个线程获取。读写锁的数据类型为pthread_rwlock_t,静态分配时可初始化为PTHREAD_RWLOCK_INITIALIZER,...

2016-03-21 18:03:18

阅读数:792

评论数:0

【IPC】互斥锁与条件变量及生产者-消费者问题

在多线程或者多进程之间共享数据时,同步是必需的,一个可行的方法是使用互斥锁与条件变量,这是一种最基本的同步形式,下面介绍其用法及在经典同步问题“生产者-消费者问题”中的应用。1、生产者-消费者问题(一)生产者-消费者问题是个经典的同步问题,也称为有界缓冲区问题,生产者、消费者代表某个线程或进程,生...

2016-03-17 20:26:31

阅读数:2451

评论数:1

【IPC】Posix消息队列

消息队列是一种IPC机制,有Posix消息队列和System V消息队列两种类型,它们有许多相似之处,但也有一些差别:对Posix消息队列的读总是返回优先级最高的最早的消息,而对System V消息队列的读则可以返回任意指定优先级的消息;当往空队列放置消息时,Posix消息队列允许产生一个信号或启...

2016-03-11 19:53:52

阅读数:800

评论数:0

【IPC】管道和FIFO

UNIX IPC有多种形式,最初使用的便是管道pipe,管道没有名字,又称匿名管道,一般用于有亲缘关系的进程间通信,后来出现了fifo这种管道,它是有名字的,又叫做有名管道,可用于无亲缘关系的进程间通信,这两种管道的数据传输都可以使用我们最熟悉的write、read函数来完成。1、管道pipe创建...

2016-03-04 21:27:29

阅读数:679

评论数:0

【Linux】socket

socket套接字是一种网络IPC,既可以在计算机内通信,也可以在计算机间通信。socket接口可以采用许多不同的网络协议,如常见的TCP/IP协议。1、socket描述符类似于文件描述符,访问socket也有对应的socket描述符。要创建一个套接字,调用socket函数:#include &l...

2015-07-10 13:30:25

阅读数:1150

评论数:0

【Linux】进程间通信之消息队列、信号量和共享存储

消息队列、信号量、共享存储是IPC进程间通信的三种形式,它们功能不同,但有一些相似点,下面先介绍它们相类似的特征,然后再逐一说明。1、相似点每个内核中的IPC结构(消息队列、信号量、共享存储)都用一个非负整数的标识符加以引用,与文件描述符不同,当一个IPC结构被创建,以后又被删除时,与这种结构相关...

2015-07-07 19:24:16

阅读数:1374

评论数:0

【Linux】进程间通信之管道pipe与FIFO

管道pipe是UNIX系统IPC进程间通信的最古老形式,并且所有UNIX系统都提供此种通信机制。管道有下面两种局限性: 1、历史上,管道是半双工管道,数据只能在一个方向上流动,某些系统则提供了全双工管道。 2、管道只能在具有公共祖先的进程之间使用。半双工管道虽然有自身的局限性,但仍是最常用的I...

2015-07-06 10:53:49

阅读数:1194

评论数:0

【Linux】IO多路转接

IO多路转接的技术可以避免阻塞IO的弊端,因为我们有时候需要在多个描述符上读read、写write,如果使用阻塞IO,就有可能长时间阻塞在某个描述符上而影响其它描述符的使用。关于阻塞IO的处理办法,可以考虑一下几个方案:1、多进程。弊端是多个进程终止时的通信,增加了程序的复杂度。2、多线程。弊端是...

2015-07-03 10:25:40

阅读数:1398

评论数:0

【Linux】readv与writev

readv 和 writev 函数用于在一次函数调用中读、写多个非连续缓冲区。有时也将这两个函数称为散布读和聚集写。#include <sys/uio.h>ssize_t readv(int fd, const struct iovec *iov, int iovcnt);ssize_...

2015-07-02 20:21:48

阅读数:2895

评论数:2

【Linux】存储映射IO-mmap

mmap,munmap——#include <sys/mman.h>void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); int munma...

2015-07-02 19:43:24

阅读数:1151

评论数:0

【Linux】记录锁

记录锁的功能是:当一个进程正在读或修改文件的某个部分时,它可以阻止其它进程修改同一文件区。fcntl函数可以实现这一功能。#include <fcntl.h>int fcntl(int fd, int cmd, ... /* arg */ );对于记录锁,cmd是F_GETLK、F_S...

2015-07-02 16:40:55

阅读数:960

评论数:0

【Linux】守护进程

守护进程daemon,是生存期较长的一种进程。它们常常在系统自举时启动,仅在系统关闭时才终止。因为它们没有控制终端,所以说它们是在后台运行的。UNIX系统有很多守护进程,它们执行日常事务活动。1、系统自举自举(bootstrapping)一词来自于人都是靠自身的“自举”机构站立起来的这一思想。计算...

2015-07-02 15:08:42

阅读数:936

评论数:0

【Linux】多线程

一个程序至少有一个进程,一个进程至少有一个线程,进程拥有自己独立的存储空间,而线程可以看作是轻量级的进程,共享进程内的所有资源。可以把进程看作一个工厂,线程看作工厂内的各个车间,每个车间共享整个工厂内的所有资源。就像每个进程有一个进程ID一样,每个线程也有一个线程ID,进程ID在整个系统中是唯一的...

2015-07-02 13:12:38

阅读数:810

评论数:0

【Linux】进程相关知识总结

一、UNIX进程环境在学习UNIX进程工作原理时,我们应该先了解一下UNIX进程的基本环境是怎么样的,首先从main函数开始。1、main函数int main(int argc, char *argv[]);相信main函数是我们非常熟悉的一个函数,它是C程序执行的入口函数。其中,argc是命令行...

2015-06-30 12:32:34

阅读数:1007

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭