Linux操作系统
文章平均质量分 65
enjoymyselflzz
这个作者很懒,什么都没留下…
展开
-
linux进程(2)之走入进程的内心世界
在上一讲了解了进程的基本知识后,我们再次深入了解进程,了解僵尸进程,孤儿进程,以及进程的优先级问题Z(zombie)僵尸进程子进程退出,父进程还在运行,但是父进程没有读取子进程的退出状态,子进程就进入僵死状态。僵死进程会以终止状态保存在进程表中,并且会一直等待父进程读取退出状态码。在这里为了方便理解我们创造一个30秒的僵尸进程 1 #include<stdio.h>...原创 2018-07-28 16:15:52 · 105 阅读 · 0 评论 -
【编程】利用共享内存和信号完成进程间通信
题目要求:两个进程之间有序完成一个写一个读,顺序打印0~100解题思路:要完成一个进程写另一个进程读,就必须要保证两个进程可以访问同一块地址空间,这里我们就可以使用共享内存,要有序就要同步使用信号量来控制。我们设定信号量为1,进程1先P申请信号量完成写的工作后V释放信号量,这时进程2再P申请信号量完成读的工作后再V释放信号量,依次类推就可以完成有序的读写所用主要函数:创建或打开...原创 2018-08-13 10:52:20 · 528 阅读 · 0 评论 -
信号的基本概念及用法
什么是信号:信号是事件发生时对进程的通知机制,有时也称为软件中断。信号与硬件中断的相似之处在于打断了程序执行的正常流程,大多数情况下,无法预测信号到达的准确时间信号源:1.硬件2.软件 (如ctrl+c 结束进程就是一个信号源)常见的几种进程信号解释:SIGHUP 关闭终端时会产生SIGINT 按下ctrl+C 发送给进程的信号SIGQUIT 按下ctrl+/ 发送...原创 2018-08-13 11:25:22 · 601 阅读 · 0 评论 -
利用管道实现ls -l| wc -l 命令
思路:子进程实现ls -l命令将结果返回给父进程,父进程再实现wc -l命令在具体实现之前需要弄清一个dup函数:int dup(int oldfd)作用:文件描述符的复制,可以实现文件共享实现:从小到大找第一个未使用的文件描述符, 让他和oldfd指向同一个文件表,操作任何一个都是访问同一个文件返回值:调用成功返回新的文件描述符,失败返回-1具体使用代码: 1 #...原创 2018-08-08 19:39:53 · 10383 阅读 · 0 评论 -
命名管道的理解与用法
命名管道的创建:int mkfifo(const char*pathname,mode_t mode);pathname创建管道的名字,mode给的权限,权限依然收到umask影响mkfifo创建命名管道文件,文件的大小永远为0,表示不占用磁盘的大小,它是用一个名字代表内核上的一块缓存,没有亲缘关系的进程可以通过名字拿到内核上的这块缓存,值得注意的是要写的时候读写管道必须同时打开对...原创 2018-08-08 20:53:41 · 2017 阅读 · 1 评论 -
进程间关系和守护进程
进程间关系:进程组、作业、会话进程组:一组进程的集合,这组进程拥有相同的进程组id,可以接收来自同一终端的各种信号创建一个进程组:用sleep 100|sleep 200| sleep 300来创建三个进程,这三个进程属于一个进程组这时我们发现他们的PGID都是2439 说明他们都在2439这个进程组进程组组长退出进程组不会退出,只要进程组中一个进程存在,这个进程组就存...原创 2018-08-26 10:58:37 · 279 阅读 · 0 评论 -
线程终止与互斥量
线程终止:void pthread_exit(void *retval);retval参数,是线程退出的返回值,不关心可以直接给NULL指定取消某个线程:pthread_cancel(tid);具体使用代码: 1 #include<stdio.h> ...原创 2018-08-22 14:20:08 · 251 阅读 · 0 评论 -
【经典面试题】生产者消费者模型
条件变量条件变量是利用线程间共享的全局变量进行同步的一种机制。主要包括两个动作:一个线程等待“条件变量的条件成立”而挂起,另一个线程让“条件成立(给出条件成立信号)”作用:为了防止竞争注意事项:条件变量的使用总是和一个互斥锁结合在一起1.pthread_cond_t cond; //定义条件变量的全局变量2.pthread_cond_init(&cond,NULL...原创 2018-08-22 16:47:21 · 1662 阅读 · 0 评论 -
信号的内核表示
信号在内核中的三种状态:阻塞、未决、递达(这里也可以用handler表示处理),如下图:递达:执行信号处理动作称为信号的递达(delivery)未决:从信号的产生到信号的递达之间的状态称为未决(peeding)阻塞:进程可以阻塞(block)信号,这时信号处在未决状态,直到进程接触对信号的阻塞,才执行递达动作修改block的值:sigprocmask(int how,c...原创 2018-08-20 10:16:45 · 305 阅读 · 0 评论 -
线程基本概念及创建
线程:一个进程内部的控制序列并发:一个CPU多个进程并行:CPU足够多,一个进程可以分配一个CPU,可以同时运行linux中用进程来模拟线程,即轻量级进程cpu调度时以PCB为基本单位的我们所说的进程是具有一个或多个执行流的线程组(即所有PCB组成的线程组)进程与线程的区别:进程是操作系统分配资源的基本单位线程是CPU调度的基本单位 进程有自己独立的地址空间,每启动一...原创 2018-08-20 11:42:09 · 177 阅读 · 0 评论 -
【图解】数据包在局域网与广域网内的传递
ISO/OSI参考模型:物理层:电气特性,设备规范,传输数据的单位是bit,这一层的设备有网卡。数据链路层:数据成帧(物理层上的数据填头填尾即加上数据来源去向,检测错误(CRC循环冗余校验码))链路:没有其他设备的一段线路链路层能收到哪些数据:1.发给自己的 2.广播数据 3.组播数据主要设备:交换机网络层:功能:1.在网上找最优的路径将源端将数据送到目标端 ...原创 2018-08-23 11:16:24 · 2600 阅读 · 0 评论 -
【详解】进程间通信之信号量
临界资源:具有排他性的资源临界区:访问临界资源的代码段信号量的本质就是计数器互斥访问 操作系统的P操作就是上锁,V操作就是解锁上锁() 解锁() { ...原创 2018-08-12 10:14:33 · 11476 阅读 · 4 评论 -
【详解】进程间通信之共享内存
共享内存图示说明:实现机制:共享内存时通过把一块内存分别映射到不同的进程空间中实现进程间通信。而共享内存本身不带任何互斥与同步机制,但当多个进程同时对同一个内存进行读写操作时会破坏该内存的内容。所以,在实际中,同步与互斥机制需要用户来完成。头文件:#include<sys/shm.h>#include<sys/ipc.h> 创建或打开共享内存...原创 2018-08-10 21:31:54 · 314 阅读 · 0 评论 -
linux环境变量
环境变量:一般是指在操作系统中用来指定操作系统运行环境的一些参数环境变量在系统当中通常具有全局特性常见的环境变量:PATH*:指定命令的搜索路径HOME*:指定用户的主工作目录,即登录到linux时默认的目录HISTSIZE*:指保存历史命令记录的条数SHELL*:当前Shell,它的值通常是/bin/bash环境变量相关命令:env :查看全部的环境变量e...原创 2018-07-29 16:29:28 · 106 阅读 · 0 评论 -
文件系统必备知识点
文件相关系统调用接口:以open函数调用为例,其打开后返回文件描述符具体步骤如图:PCB中fds(文件描述符)专门用来存储已打开的文件,它是一个数组类型文件表中存储文件的打开标志、当前读写位置、引用计数、指向v节点的指针,v节点中存有指向i节点的指针在linux下我们ls获取的信息就来自v节点表,i节点表中存放的是磁盘数据的存储位置引用计数(refcnt):表示有几个文...原创 2018-08-03 19:33:24 · 439 阅读 · 0 评论 -
进程创建之fork与vfork
虚拟地址与物理地址的映射关系(借助页表)由图中的映射关系我们可以发现,虚拟地址与物理地址并不是一一对应的,这样也就会出现一种问题,一个变量地址相同内容不同,其实是虚拟地址相同,所对应的物理地址不同的原因那么是谁管理着虚拟地址空间呢?pcb中有mm_strct管理虚拟地址空间linux中错误提示linux中绝大多数函数出错返回值都是-1,函数出错后将错误编号放入errno全局变量...原创 2018-07-30 16:07:16 · 176 阅读 · 0 评论 -
linux下的静态库的打包与使用
静态库:作用:对一系列.o文件打包,方便使用生成方法:ar -cr lib库名.a 文件使用:gcc main.c -L寻找库:默认缺省路径:/lib64 /usr/lib64自定义查找路径: -L 库路径实际操作一次:我创建了一个文件用来存放加减乘这样的.c .h文件现在我要使用这些文件,第一步我就时让他们变成.o文件再利用gc...原创 2018-08-03 20:58:53 · 2916 阅读 · 0 评论 -
linux动态库的创建与使用
动态库(共享库):动态库时一个包含可由多个程序同时使用的代码和数据的库,它是为了解决相同的机器码在物理内存上存储多份的问题在物理内存上存放一份,哪个进程需要可以将这个代码映射到自己的虚拟地址空间上(共享存储映射区),它的位置在栈和堆之间动态库的打包与使用:1.生成动态库:gcc -fPIC -shared -o lib动态库名.so xxx.c PIC:位置无关...原创 2018-08-04 14:33:23 · 2186 阅读 · 1 评论 -
进程间通信之管道
进程间通信(IPC)目的:让不同进程之间进行数据传输、资源共享、事件通知、进程控制进程间通信发展史:1.管道 2.systemV IPC : 消息队列(数据传输) 共享内存(数据共享) 信号量(事件通知)3.POSIX IPC: ...原创 2018-08-05 17:24:59 · 130 阅读 · 0 评论 -
Linux进程概念
冯诺依曼体系结构:这里的存储器指的是内存,在不考虑缓存的情况下,输入输出设备只能与内存进行数据写入或读取,不能直接与CPU“沟通”内存可以与任何设备直接进行打交道操作系统OS(基本的程序集合):是一款纯正“搞管理”的软件1.内核(文件管理、进程管理、内存管理、驱动管理)2.其他程序(shell程序、函数库等等)设计OS的目的:1.管理所有的硬件程序2.为用户程序...原创 2018-07-28 11:00:33 · 107 阅读 · 0 评论 -
操作系统基本的接口函数
文件描述符:操作系统通过一个整数代表打开的文件,这个整数就被称为文件描述符,windows上称为文件的句柄,进程能够打开的文件描述符的范围[0,1024] ,我们可以用ulimit-n查看。有三个文件描述符进程一创建时就打开的标准输入stdin:0 标准输出stdout:1 标准错误stderroe:2 操作系统提供的基本接口函数:op...原创 2018-08-01 16:16:36 · 2332 阅读 · 0 评论 -
实现Linux下的cp命令
cp命令的作用:读取源文件写到目标文件具体实现思路:1.打开源文件,先判断argc==3,argv[0]为可执行程序的名字,argv[1]为源文件,argv[2]为目标文件2.当源文件存在的时候用O_EXCL进行一次提示3.当源文件与目标文件都正确打开后,循环读取源文件写入目标文件4.完成实现后可以用vimdiff 文件A 文件B 可以比较两个文件相同与否具体实现代码:...原创 2018-08-01 17:09:12 · 1906 阅读 · 0 评论 -
【详解】进程间通信之消息队列
消息队列:操作系统在内核中创建一个队列,使得用户进程可以一个放数据,一个取数据,消息队列中的每个节点存放的信息有:消息类型号、消息的长度、消息的具体内容,具体情况如图:所引用的头文件:#include<sys.msg.h>#include<sys/ipc.h>打开或者创建一个消息队列:msgget(key_t key,int flags)内核...原创 2018-08-10 20:29:14 · 191 阅读 · 0 评论 -
UDP编程
通常使用“点分十进制”字符串表示IP地址,用3个“.”划分成四个区。每个区的表示范围为0~255端口号具有2个字节16个比特位的整数IP是将数据从A主机交付给B主机端口号用来标识一个进程,一个端口号只能被一个进程占用IP地址+端口号=套接字,可以进行数据层面的来往,本质上就是进程间的通信端口号和进程ID的区别:每一个进程都需要有PID,但不是所有进程都有端口号,除非这个进程...原创 2018-08-28 09:34:26 · 241 阅读 · 0 评论