Linux
文章平均质量分 63
小宣子xym
这个作者很懒,什么都没留下…
展开
-
Linux--fork与vfork
一、fork函数可以从一个已存在的进程中创建一个新进程,新进程为子进程,原进程为父进程 #include <unistd.h> pid_t fork(void);一个现有进程可以调⽤用fork创建一个新进程。返回值:子进程中返回0,父进程中返回子进程ID,出错返回-1。关于fork的问题,通过几个例子看一下输出结果:为什么会出现一个这样的结果呢? 调用fork()后,又创建出了一个子进程,所以此原创 2018-03-06 21:03:54 · 173 阅读 · 0 评论 -
进程间通信3--共享内存
共享内存机制主要用于实现进程间大量的数据传输共享内存是在内存中单独开辟的一段内存空间,这段内存空间有自己特有的数据结构,包括访问权限、大小和最近访问的时间等。该数据结构如下图1、创建共享内存(shmget)2、共享内存的控制(shmctl)系统使用shmcl函数来实现共享内存的控制,包括读取状态、设置状态和删除 3、映射共享内存(shmat)...原创 2018-03-31 09:44:02 · 138 阅读 · 0 评论 -
信号知识整理
信号基础知识首先来说说,信号是什么?信号可以理解为是一种“软中断” 信号可以使一个正在运行的进程被异步打断,然后转而去处理一个突发的事件。常见的几种信号的意思 SIGHUP 关闭终端 SIGINT Ctrl+c SIGQUIT Ctrl+\ SIGKILL 杀死进程 SIGPIPE ...原创 2018-04-15 09:53:22 · 230 阅读 · 0 评论 -
多线程间的同步与互斥
多线程与临界区多线程想要访问临界区时,就要对临界区进行上锁,这与之前写到的进程互斥是一个道理,这也就是防止共享数据被并发访问的解决方法,这种上锁叫做互斥锁互斥锁互斥锁以排他的方式保护共享数据被并发访问。 因为在线程中,内存地址空间是共享的,就像一个大房子,在这个进程中的线程们都可以进来,当我们某一个线程想做一些事时,不想让其他线程打断,那我们就给门上加个锁,当一个进程进来后,...原创 2018-04-09 20:33:43 · 6578 阅读 · 0 评论 -
Socket基础【菜鸟学习日记】
Socketsocket是实现网络主机进程间通信的一种机制。从用户空间来看,socket就是一个文件描述符,对socket的操作等同于对普通的文件描述符操作,可以使用read、write、close函数来操作,一旦针对该socket必要的初始化完成后,与对端的数据交互都是通过该socket来实现的例如:要向对方发送数据,只需要将数据write到该socket; ...原创 2018-03-31 09:28:06 · 2407 阅读 · 0 评论 -
文件I/O方式比较
1、阻塞式文件I/O 如图所示,一旦进程期望读取数据,就调用read/write函数,进程从调用这些函数开始,一直到返回的这段时间里,都处于阻塞状态。当recv正常返回时,进程继续其它操作这种模式的优点在于操作简单,但整个进程在等待过程中处于阻塞状态,不能申请到CPU执行其它操作2、非阻塞式 如果设置某个文件IO操作为非阻塞I/O,即相当于告诉内核:...原创 2018-04-04 09:44:48 · 353 阅读 · 0 评论 -
信号基础知识【菜鸟学习日记】
信号与中断Linux信号是一种进程间异步的通信机制,可以理解为是一种“软中断”。 信号可以使一个正在运行的进程被异步打断,然后转而去处理一个突发的事件。 异步事件是不可预见的,只能通过某些特定的方式来预防,或者说,当该异步事件发生时根据原来设定好的的相应操作去完成。 几种常见信号处理SIGCHLD:子进程退出时会给父进程发送该信号。父进程可以根据该信号来完成对子...原创 2018-03-29 10:54:53 · 561 阅读 · 0 评论 -
Linux操作系统的层次
简单来说,Linux操作系统整体分为三层最底层的硬件系统,包括CPU、内存、硬盘、网卡等;硬件系统之上是内核,这是操作系统的核心,负责管理硬件系统,同时为上层的应用程序提供操作接口;用户进程在这表示计算机中运行的所有程序,它们运行于用户空间,由内核统一管理; Linux内核Linux内核采用一种整体式的结构,整个内核是一个独立的、非常大的程序,这样可以使操作系统的各个...原创 2018-03-29 13:28:06 · 5619 阅读 · 0 评论 -
线程退出前的资源释放问题
线程退出前的资源释放问题类似于进程的atexit()函数,线程在退出前也可以执行用户显示定义的一些函数。无论是可预见的线程终止还是异常终止,都会存在资源释放的问题,在不考虑因为运行出错而退出的情况下,如何保证线程终止时能顺利的释放掉自己所占用的资源,特别是锁资源。资源独占锁的使用:线程为了访问临界资源而为其加上锁,但在访问过程中被外界取消,如果线程处于响应取消状态,且采用异步方...原创 2018-04-06 18:24:26 · 4321 阅读 · 0 评论 -
进程间通信
进程是一个独立的资源管理单元,不同进程之间资源是独立的,都有自己的PCB,不能在一个进程中直接访问另一个进程的用户空间和内核空间资源。但是,进程不是孤立的,不同的进程之间需要进行消息的交互和状态的传递,因此需要进程间数据传递、同步及异步的机制。 显然,这些机制不能由哪一个进程直接管理,只能由操作系统来完成这些机制的管理和维护。Linux提供了大量进程间通信机制来实现同一主机两个...原创 2018-03-27 10:03:52 · 93 阅读 · 0 评论 -
Linux--基础系统I/O【菜鸟学习日记】
首先理解I/O输入/输出(I/O)是主存和外部设备(如磁盘、终端和网络)之间拷贝数据的方式。输入是从设备拷贝数据到主存,输出反之。Unix I/O所有的I/O设备,如网络、磁盘和终端,都是被模型化为了文件,所有的输入和输出都被当作相对应的文件来读和写操作。 正是因为这种将设备映射为文件的方式,在我们要对一个设备进行操作时只要对向对应的文件进行操作即可,而Unix内核也引出了一个简...原创 2018-03-09 19:32:20 · 157 阅读 · 0 评论 -
Linux--进程概念&描述
一、进程概念对正在运行的程序的一种抽象可以分配处理器,并由处理器执行内核观点:进程是分配系统资源(cpu时间、内存)的实体进程的两个基本元素是程序代码(可能被执⾏行相同程序的其他进程共享)和代码相关联的数据集。进程是一种动态描述,但是并不代表所有的进程都在运⾏行。(进程在内存中因策略或调度需求,会处于各种状态)二、进程的描述–PCB进程的所有信息被放在一个叫做进程控制块的数据结构中,可以理解原创 2018-03-06 10:55:17 · 282 阅读 · 0 评论 -
静态库&动态库【菜鸟学习日记】
静态库(.a) 将多个.o文件打包在一起程序在编译链接的时候将库里要用的代码链接到可执行的文件中去,程序运行时将不再需要静态库动态库(.so)程序在运行时才去链接动态库要用的代码,多个程序可共享使用; 一个与动态库链接的可执行程序,只包含它所要用到的函数的入口地址的一个表 生成静态库为什么要将多个.o 文件打包在一起? 在之前写加减运算时,我们在...原创 2018-03-23 20:40:39 · 229 阅读 · 0 评论 -
Linux--线程【菜鸟学习日记】
线程与进程一样,具有创建、退出、取消和等待等基本操作,可以独立完成特定事物的处理;线程同样有自己的特有属性,如线程也有唯一标识自己的线程ID,但线程占用更少的资源什么是线程?线程的定义简单来说线程就是进程中的一个执行流,更准确来说:线程是“一个进程内部的控制序列”进程是资源竞争的基本单位线程是程序执行的最小单位创建线程int pthread_create(...原创 2018-03-31 10:58:45 · 202 阅读 · 0 评论 -
进程间通信2--消息队列
什么是消息队列消息队列是进程之间通信的一种方式,它提供了一种从一个进程向另一个进程发送数据块(结构体)的方法消息队列结构我们在(/usr/include/linux/msg.h)下我们可以去cat一下msg.h,查看一下消息队列的结构 我们可以发现消息队列结构体中第一个是一个IPC数据对象;也可也看出消息队列是用链表实现的 创建消息队列/获取消息队列标识符#...原创 2018-03-26 22:40:09 · 136 阅读 · 0 评论 -
Linux--信号练习
信号的响应有三种方式:响应方式: 1、缺省 2、忽略(有些信号不能被忽略,SIGKILL 、SIGSTOP) 3、捕获信号(SIGKILL 、SIGSTOP 也不能被捕获)安装信号我们就收到信号有相应的处理,但首先我们要先有这个信号才行,所以首先要安装信号 下面来用一下看看:我将Ctrl+c的信号SIGINT进行设置一下,我们按Ctrl+c执行我们自己写的函数,...原创 2018-04-07 21:43:23 · 290 阅读 · 0 评论 -
信号量
信号量主要用来实现进程间的同步问题,避免并发访问共享资源在实际应用中,两个进程间通信可能会使用多个信号量,因此Linux在管理是以信号量集来管理 信号量集合使用指针指向一个由数组组成的信号量单元,在此信号量单元中存储了个信号量的值 1、创建信号量集合(semget)2、控制信号量集合、信号量(semctl) 该函数最多可有4个函数。当第三个参数为S...原创 2018-04-04 13:43:04 · 245 阅读 · 0 评论 -
多路复用——select&poll&epoll
select()系统调用 select()函数,提供轮循等待的方式从多个文件描述符中获取状态变化后的状态 int select(int nfds, //socket+1 fd_set *readfds, fd_set *writefds, fd_set *exceptfds, s...原创 2018-04-09 14:22:08 · 193 阅读 · 0 评论 -
内存分配的原理
内存分配的原理从操作系统角度来看,进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)。 1、brk是将数据段(.data)的最高地址指针_edata往高地址推; 2、mmap是在进程的虚拟地址空间中(堆和栈中间,称为文件映射区域的地方)找一块空闲的虚拟内存。 这两种方式分配的都是虚拟内存,没有分配物理内存。在第一次访问已分配的虚拟地址空间的时候,...原创 2018-05-15 14:16:50 · 3229 阅读 · 1 评论