- 博客(13)
- 资源 (9)
- 收藏
- 关注
原创 经典同步问题
生产者——消费者问题生产者——消费者问题是一个经典的同步问题,生产者生成的数量存在一个上限,不能生成超出这个上限。消费者不能消费未生产的东西。假设如下:mutex信号量是生产者和消费者共享缓冲区的互斥要求,初始化为1。缓冲区的大小为n。设空缓冲项的数量用empty表示,并初始化为n,设满缓冲项满为full,并初始化为0。那么生产者进程和消费者进程如下:生产者进程:do{ ....
2018-11-24 15:24:57 317
原创 进程同步
操作系统中存在多个进程并发访问和操作同一个数据,并且执行结果和进程执行的特定顺序有关,称为:竞争条件。为了防止竞争条件发生,我们需要确保一段时间内只有一个进程能操作这个数据。为了实现这个保证,进程之间必须要同步。假设一个OS有n个进程,每个进程有一个“临界区”。在该区域进程能改变同一个数据。为了保证竞争条件不发生,我们需要保证在“临界区”只能有一个进程在执行,其他进程不能在“临界区”执行。因此...
2018-11-24 13:44:19 405
原创 Linux常用命令——文件目录类
在Linux下和Windows最大的不同可能在于用户使用操作系统的方式,在Windows下通常是点击鼠标来打开一个应用程序,或者完成某一个操作。但是Linux下更多是使用Shell命令来操作。它是用户使用Linux的桥梁。Shell既是一种编程语言,也是一种命令语言。在Linux下普通用户的shell提示符是"$"。对于超级用户(root)而言,命令提示符是“#”。Shell命令的一般格式...
2018-11-18 20:11:44 567
原创 散列表(哈希表)
散列表散列表:通常,我们称散列的实现为散列表。散列是一种支持常数时间执行插入,删除,查找的技术,但是散列不支持排序操作。因此,FindMax,FindMin诸如此类的操作都将不支持。看到这里,我相信大家都明白我们为什么需要散列表了吧。(它能实现常数时间执行插入,删除,查找的技术)理想的散列表数据结构是一个包含有关键字的具有固定大小的数组。关键字就是含有某个相关值的字符串(在这里把数字也当做...
2018-11-13 17:30:37 3279 1
原创 Linux进程通信——信号
信号是在软件层面对中断机制的一种模拟,信号的出现使得进程直接的通信不在是被动的,不在向之前那样,read()操作往往需要等待write()操作结束。因为信号是对中断的一种模拟。既然是中断,那么它的发生就是不确定。就不会发生一个进程阻塞在这里等待另一个进程执行的结果。这样的异步性通信机制无疑是更加强大的。在终端输入kill -l可以查看当前系统所支持的所有信号。(内核版本4.15)可以...
2018-11-11 14:45:18 906 1
转载 Linux信号列表及其详解
我们运行如下命令,可看到Linux支持的信号列表:$ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 ...
2018-11-10 18:54:58 728
原创 Linux进程通信——有名管道
管道(pipe)是无名管道,他是进程资源的一部分,随着进程的结束而消失。并且它只能在拥有公共祖先进程的进程内通信。而有名管道(FIFO)的出现则解决了这个问题。FIFO提供了一个路径名与它关联。这样可以通过访问该路径就能使得两个进程之间相互通信。此处的FIFO严格遵守“先进先出”原则。读总是从头开始的,写总是从尾部进行的。匿名管道和FIFO都不支持lseek函数对他们操作。Linux下建立有名管道...
2018-11-10 17:53:32 443
原创 Linux进程间通信——匿名管道
进程如果不是独立进程,那么它就需要和别的进程进行通信。在进程协作时可以采用共享一个缓冲区的方式来实现。当然,OS的IPC提供了一种机制,以允许不必通过共享地址空间来通信和同步其动作。这就不得不提Linux的的前身Unix。因为Linux一开始就是从这儿借鉴的。加上Linux从一开始就遵守POSIX标准。Unix最早是由AT&T的贝尔实验室开发的,值得一提的是,在Unix操作系统发展的过...
2018-11-06 22:02:12 450
原创 Linux文件
在Linux下,一切皆文件。这是我们嵌入式Linux开发与应用这门课的老师经常挂在嘴边的一句话。足以体现出在Linux操作系统中,对于一切资源的管理都是对文件的操作。Linux系统中每一个分区都是一个文件系统,都有自己的目录层次。Linux会将这些在不同分区的,单独的文件系统按一定的方式形成一个系统的总目录层次结构。Linux下可以通过shell命令来操作文件,但是功能有一定限制;我们也可...
2018-11-05 21:30:24 425
原创 Linux进程终止
在Linux下,进程退出就表示进程即将结束了(为什么是即将,这是因为Linux设计的是父进程给子进程收尸)。正常退出包括3种情形。main函数中执行return 0; 调用exit函数,函数原型:void exit(int status); 调用_exit函数,函数原型:void exit(int status);进程退出(进程终止)会将进程的所有资源,包括物理内存,打开文件等都被OS给...
2018-11-04 16:53:21 405
原创 Linux僵尸进程以及wait函数
僵尸进程就是已经结束的进程(几乎不占计算机资源),但是它并没有从进程列表中删除。僵尸进程太多会导致操作系统的进程数目过多,从而占满了OS的进程表。进而导致无法创建新进程,致使OS崩溃。僵尸进程几乎不占资源,它没有可执行代码,也不能被调度,但是它占据着进程表中的一个位置,记载着该进程的PCB信息。它需要等待他的父进程来终结它。一旦它的父进程是一个循环,不会结束(父进程不去调用wait函数或者wa...
2018-11-04 14:28:50 725 1
原创 Linux下使用exec族函数进行进程替换
在Linux下使用fork或者vfork函数创建的子进程是完全复制父进程的代码来执行的。虽然我们可以使用fork函数返回值的不同来使得父进程和子进程执行的代码不同。但是有时候父进程是一段c程序,子进程却是个shell。这个时候,fork就没法解决这个问题。因此exec函数是必须的。exec函数族共包括7个函数,函数形式如下:系统调用 int execve(const ch...
2018-11-04 00:46:45 782 1
原创 Linux下创建新进程
创建新进程在Linux的下是由父进程来完成的,创建完成的新进程是子进程。子进程有三种执行顺序的可能性:父进程和子进程并发执行; 子进程先执行,父进程等待子进程执行完毕。 父进程先执行,子进程后执行。另外新进程的地址空间有两种可能性:子进程是父进程的复制品(除了PID和task_struct中是子进程自己的,其余的都从父进程复制而来) 子进程装入另一个程序。在Linux下的fork...
2018-11-03 22:17:55 21879 2
单片机开发USB转串口CH340驱动
2018-05-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人