![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
文章平均质量分 62
ffsiwei
这个作者很懒,什么都没留下…
展开
-
初识进程----
一、概念 进程:程序的一次动态执行过程。每个进程都有自己的状态和自己的虚拟地址空间,是操作系统分配资源的基本单位。 程序:为了完成一系列任务的特定指令的有序集合。 进程和程序的区别: 1、进程是动态的,程序的静态的 2、一个程序可以对应多个进程,但一个进程只能对应一个程序 3、程序是代码+数据,进程是:代码+数据+堆栈+PCB。 二、创建 创建一个进程的一般工作: 1、分配一个P...原创 2018-07-09 16:08:46 · 190 阅读 · 0 评论 -
进程间同步——信号量集
一 、创建或者打开信号量 int semget(key_t key, int nsems,//信号量集中信号量的个数 int flag);//打开:0,创建:IPC_CREAT|0644 返回值:返回信号量集的标识符 查看信号量: ipcs -s具体案例:...原创 2018-07-27 11:36:30 · 262 阅读 · 0 评论 -
进程间通信——共享内存
一、创建或者打开共享内存 shmget(key_t key, size_t size,//共享内存段的大小 int flag);//打开:0,创建:IPC_CREAT|0644 查看共享内存: ipcs -m 具体案例:#include <stdio.h>#include <stdl...原创 2018-07-27 11:07:40 · 133 阅读 · 0 评论 -
进程间通信——消息队列
1、消息队列的创建 msgget(key_t key,//相当于文件名 int flag);//打开:0,创建:IPC_CREAT|0644 返回值:消息队列的id。相当于文件描述符 查看IPC对象 ipcs -q:查看系统所有的创建的消息队列 删除IPC对象: ...原创 2018-07-27 10:55:33 · 184 阅读 · 0 评论 -
线程的同步和互斥
1、一些基本概念 互斥:在同一时间内访问资源的唯一性 同步:是一种时序性和协作性 临界资源:一次仅允许一个进程使用的资源 临界区:访问临界资源的一段代码 2、为什么要进行同步?互斥? 线程互斥:因为多个线程是用共享一个资源的,这个资源就是临界资源,多个线程对资源的访问就需要用到线程的同步和互斥。 线程同步:如果我们的某一个线程优先级特别高,那么它可能一种占据这个临界资源,这个时候,其...原创 2018-07-27 09:31:41 · 700 阅读 · 0 评论 -
线程的创建、终止、等待和分离
1、线程创建 int pthread_create(pthread_t thread,const pthread_attr_t *attr,void (start_routine) (void ),void *arg); 参数:thread:返回线程ID(用户态)attr:设置线程属性,不易设为NULL;start_routine:是一个函数地址,线程启动时要执行的函数arg:传给...原创 2018-07-27 08:03:48 · 651 阅读 · 1 评论 -
什么是线程?线程的优缺点和使用场景。
1、什么是进程? 进程是程序的而一次动态执行过程。 2、什么是线程? 个进程内部的控制序列, 是进程的一个实体,是进程的一条执行路径。程也就是一个轻量级进程(仅仅是在linux系统中。在windows系统中,进程就是经常进程,线程就是线程),每个线程都有自己的线程控制块,即一个进程至少有一个轻量级进程。 在线程组里面,所有的线程都是对等的关系,没有父线程的概念。 3、什么是主线程? 主...原创 2018-07-27 07:44:14 · 15808 阅读 · 0 评论 -
命名管道和匿名管道
我们知道进程间是可以通信的。可以达到数据传输、资源共享、事件通知、进程控制等目的。进程间通信主要包括管道、系统IPC,套接字等。 管道分为三种:普通管道:一是单工,只能单向传输 ,二是仅能在父子进程或者兄弟进程中使用。流管道:去除了第一种限制,为半双工,可以双向传递,命名管道:去除了第二种限制 ,可以在很多并不相关的进程 中进行通信。1、普通管道 int pipe(int f...原创 2018-07-13 15:07:25 · 10563 阅读 · 4 评论 -
静态库和动态库
一、编写简单的add/sub/mul/div函数 add函数 :int add(int a,int b){ return a+b;}sub函数:int sub(int a,int b){ return a-b;}mul函数 :int mul(int a,int b){ return a*b;}di...原创 2018-07-11 16:33:18 · 229 阅读 · 1 评论 -
进程IO----fopen系列函数和open系列函数,结构体fd和FILE的比较
结构体fd和FILE的比较 1、文件描述符fd fd是一个整数,在open时产生。起到一个索引的作用,进程通过PCB中的文件描述符表找到该fd所指向的文件指针file,因此在Linux系统下面,文件描述符主要是被用来标识一个文件。内核通过文件对象表来管理系统中各种各样的文件,而文件表则是通过指针来指向打开的文件,进而达到管理整个文件系统的目的。2、文件指针FILE ...原创 2018-07-10 18:25:59 · 1487 阅读 · 0 评论 -
实现简单的shell功能
首先要了解shell: shell用fork建⽴新进程,⽤execv函数簇在新进程中运⾏⽤户指 定的程序,最后shell⽤wait命令等待新进程结束。wait系统调 ⽤同时从内核取得退出状态或者信号序号以告知⼦进程是如何结束的。 以下就是实现了简单的shell:#include <stdio.h>#include <stdlib.h>#include <...原创 2018-07-09 20:03:57 · 650 阅读 · 0 评论 -
system()、popen()、fork()三个函数 的区别
一、system:在执行期间调用进程会一直等待shell命令执行完成。 fork :执行期间父进程等待子进程的退出码。 实际上system()函数执行了三步操作: 1.fork一个子进程; 2.在子进程中调用exec函数去执行command; 3.在父进程中调用wait去等待子进程结束。 返回值: 1>如果 exec 执行成功,即 command 顺利执行,则返回 c...原创 2018-07-09 17:53:20 · 2097 阅读 · 0 评论 -
exec函数族
在fork后的子进程可以使用exec函数组,可以装入其他运行程序,子进程替换原有进程,做和父进程不一样的事。 1、使用exec函数的情况: (1)、当进程认为自己再也不能为系统和用户做任何贡献时,就可以调用exec函数族让自己重生; (2)、如果一个进程想要执行另外一个程序,那么他就可以调用一个fork函数新建一个进程,然后调用一个任意一个exec函数使子进程充重生。 exec函数: (...原创 2018-07-09 17:05:24 · 773 阅读 · 0 评论 -
fork函数和vfork函数的区别
1、fork()函数说明 fork()函数若调用成功有两个返回值:子进程返回0,父进程返回进程标记,出错返回-1。fork()函数将运行的程序分为两个几乎一样的进程,每个进程都是从同一位置启动的线程。两个进程中的线程同时执行,就像两个用户同时启动。 注意: 当调用fork函数时,在该位置的进程一分为二,一个是父进程,一个是子进程。 若调用成功返回两个值,父进程返回子进程的标...原创 2018-07-09 16:55:28 · 464 阅读 · 0 评论 -
进程的创建--等待--终止
进程的创建–等待–终止#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <errno.h>int main(void){ pid_t pid=fork();//创建进程 if(pid<0)//创建失败 ...原创 2018-07-09 16:54:26 · 145 阅读 · 0 评论 -
ipcs -q/m/s与ipcrm -q/m/s的使用
ipcs命令ipcs -a :显示全部可以显示的信息ipcs -q:显示活动的消息队列ipcs -m:显示活动的共享内存信息ipcs -s:显示活动的信号量信息ipcrm命令:ipcrm -m id:删除共享内存标识ipcrm -M key:删除由关键字创建的共享内存标识ipcrm -q id :删除消息队列标识 id和其相关的消息队列和数据结构ipcrm -Q ke...原创 2018-07-27 11:56:12 · 2613 阅读 · 0 评论