嵌入式Linux中文站

linux 同步机制之complete

阅读(104)

在Linux内核中,completion是一种简单的同步机制,标志things may proceed。 要使用completion,必须在文件中包含linux/completion.h,同时创建一个类型为struct completion的变量。 [cpp] view plain copy 这个变量可以静态地声明和初始化: DECLARE_COMPLETION(my_comp); 或者动态初始化: struct completionmy_comp; init_completion(my_comp); 如

Linux进程间通信——使用共享内存

阅读(105)

下面将讲解进程间通信的另一种方式,使用共享内存。 一、什么是共享内存 顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。 特别提醒 :共享内存并

Linux进程间通信——使用命名管道

阅读(112)

这里将会介绍进程的另一种通信方式命名管道,来解决不相关进程间的通信问题。 一、什么是命名管道 命名管道也被称为FIFO文件,它是一种特殊类型的文件,它在文件系统中以文件名的形式存在,但是它的行为却和之前所讲的没有名字的管道(匿名管道)类似。 由于Linux中所有的事物都可被视为文件,所以对命名管道的使用也就变得与文件操作非常的统一,也使它的使用非常方便,同时我们也可以像平常的文件名一样在命令中使用。 二、创建命名管道 我们可以使用两下函数之一来创建一个命名管道,他们的原型如下: [cpp] view pl

Linux系统编程--fcntl()读写锁实例

阅读(180)

在多进程对同一个文件进行读写访问时,为了保证数据的完整性,有事需要对文件进行锁定。可以通过fcntl()函数对文件进行锁定和解锁。 1. fcntl 1.1.功能描述:根据文件描述词来操作文件的特性。 1.2.用法: int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock); fd:文件描述词。 cmd:操作命令。 arg:供命令使用的参数

Linux进程退出之方法论

阅读(185)

导读 当一个进程结束了运行或在半途中终止了运行,那么内核就需要释放该进程所占用的系统资源。这包括进程运行时打开的文件,申请的内存等。 进程退出 Linux下进程的退出分为正常退出和异常退出两种: 1.正常退出 a. 在main()函数中执行return 。 b.调用exit()函数 c.调用_exit()函数 2.异常退出 a.调用about函数 b.进程收到某个信号,而该信号使程序终止。 不管是哪种退出方式,系统最终都会执行内核中的同一代码。这段代码用来关闭进程所用已打开的文件描述符,释放它所占用的内存

对linux进程的理解

阅读(201)

进程是UNIX操作系统抽象概念中最基本的一种,其中涉及进程的定义以及相关的概念,比如线程;它们在内核中如何被列举?如何创建?最终又如何消亡?让我们通过下面的分析,一步步解开内核进程的神秘面纱。 1. 进程和线程 进程和线程是程序运行时状态,是动态变化的,进程和线程的管理操作(比如,创建,销毁等)都是有内核来实现的。 Linux中的进程于Windows相比是很轻量级的,而且不严格区分进程和线程,线程不过是一种特殊的进程。 所以下面只讨论进程,只有当线程与进程存在不一样的地方时才提一下线程。 进程提供2种虚拟

Linux内核线程优先级设置的方法介绍

阅读(106)

个人理解,内核级线程和进程是一样的,前者与POSIX线程(pthread)有很大的区别。因此,内核的进程调度策略和系统调用也适用于内核级线程。 调度策略有三种: 1. SCHED_NORMAL 非实时调度策略,默认情况下是100~139,由nice值决定; 2. SCHED_FIFO实时调度策略,先到先服务。一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃 3. SCHED_RR实时调度策略,时间片轮转。当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。同样可以被高优先级抢占

Linux进程的睡眠和唤醒

阅读(197)

1 Linux进程的睡眠和唤醒 在Linux中,仅等待CPU时间的进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程的状 态标志位为TASK_RUNNING。一旦一个运行中的进程时间片用完, Linux 内核的调度器会剥夺这个进程对CPU的控制权,并且从运行队列中选择一个合适的进程投入运行。 当然,一个进程也可以主动释放CPU的控制权。函数 schedule()是一个调度函数,它可以被一个进程主动调用,从而调度其它进程占用CPU。一旦这个主动放弃CPU的进程被重新调度占用 CPU,那么它将从上次停