- 博客(144)
- 收藏
- 关注
原创 进程线程复习 2019-7-27
1.Linux下进程1.1 Linux下进程1.性质1.每一个进程都有一个 PCB ,其是一个描述了进程所有详细信息的结构体,比如 pid 、 栈信息 等;2.程序是静态表现(占用物理磁盘空间);进程是该程序运行后的动态表现(占用物理内存空间,具有CPU使用权);2.进程的组成结构从高地址到低地址分别是: PCB(4G~3G) 、 环境变量/命令行参数(从3G开始) 、 栈 、 静...
2019-07-30 09:29:12 254
原创 乐视奥比中光使用 2019-7-26
1.乐视奥比中光使用记录1.1 首先安装依赖项1 首先下载libuvc库,这个库是奥比中光使用rgb图像显示的依赖库git clone https://github.com/ktossell/libuvccd libuvcmkdir buildcd buildcmake ..make && sudo make install2 在https://orbbe...
2019-07-26 19:14:01 1578 4
原创 Linux高级 2019-6-2下午
1.网络基础1.1 广域网最大的广域网就是互联网;互联网在世界范围内使用,有统一的标准,是无数软硬件集合达成的结果1.2 万维网所有通过 www. 进行访问的 web 服务器都是万维网服务范畴,后台 web 服务,前台浏览器交互1.3 局域网通过特定技术手段完成小范围的互联,私密性较强,较为安全1.4 城域网相对于局域网,覆盖面更广,而且比局域网使用的软硬件更加多样...
2019-06-05 10:34:45 189
原创 Linux高级 2019-6-2上午
1.进程回收问题1.1 信号回收父进程捕捉 SIGCHLD 信号,通过 wait 函数或者 waitpid 函数进行回收子进程1.2 信号回收可能产生的问题可能导致某些系统调用被强制中断中断发生的原因是由于我们需要从内核模式向用户模式进行转换,转换的过程中可能会出现转换未完成而信号已被强制回收的情况1.3 父进程回收僵尸进程的步骤1.kernel 向父进程发送一个 SIGC...
2019-06-05 10:34:21 162
原创 Linux高级 2019-6-1下午
1.进程互斥锁1.1 与线程锁类型相同,也是 pthread_mutex_t 类型1.2 修改线程锁属性,将其更改为进程锁1.3 原子锁相关函数pthread_mutexattr_t : 原子锁属性类型pthread_mutexattr_inti(pthread_mutexattr_t*) : 初始化原子锁属性pthread_mutexattr_destroy(pthread_mut...
2019-06-05 10:33:54 138
原创 Linux高级 2019-6-1上午
1.线程同步1.1 线程为什么需要同步多线程协同配合,完成指定任务,缩短完成时间1.2 多线程同步产生的问题多线程访问 共享资源/全局资源 造成数据访问冲突1.3 线程a与线程b同时对全局资源code进行自加操作,则无法确定code最后变为了几,可能是2、3、4#include <stdio.h>#include <stdlib.h>#include...
2019-06-05 10:33:17 151
原创 Linux高级 2019-5-26上午
1.线程的三种退出方式1.1 普通线程的退出对于主控线程来说不受影响#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <pthread.h>#include <sys/types.h>#include <string.h>void...
2019-05-31 10:08:09 126
原创 Linux高级 2019-5-25下午
1.线程1.1 什么是线程线程是最小的调度单位,线程就是寄存器和栈1.2 线程和进程的区别1.进程独占资源(如内存、I/O、cpu等),线程共享资源(如内存、I/O、cpu等);2.进程体积远远大于线程;3.进程之间的地址空间相互独立,同一进程的线程共享本进程的地址空间;4.每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中...
2019-05-31 10:07:15 105
原创 Linux高级 2019-5-25上午
1.时序竞态问题1.1 上周的 mysleep 函数仍存在问题:当我们在定时器后面加上一行 sleep 函数时,pause函数将无法捕捉到SIGALRM信号,从而导致进程始终挂起1.2 时序竞态问题的起因因为资源的竞争导致信号被提前处理,进程无法得到通知或事件1.3 解决该问题1.只能通过原子操作1.定时的同时挂起进程2.先屏蔽信号,挂起的同时接触屏蔽2.原子操作函数:...
2019-05-31 10:06:45 134
原创 Linux高级 2019-5-19下午
1.sigpending 函数1.1 该函数的功能是读取当前进程的未决信号集1.2 打印当前进程的未决信号集#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <signal.h>#include <sys/types.h>#include &l...
2019-05-31 10:05:36 116
原创 Linux高级 2019-5-19上午
1.信号1.1 信号编号在 Linux 系统中,可以通过 kill -l 命令查看信号的编号;前31个信号是软件工程师所使用的,后33个是嵌入式工程师所使用的信号;1.2 常用的信号(有快捷键的信号)ctrl+c :触发 SIGINT 信号;ctrl+z :触发 SIGQUIT 信号;ctrl+\ :触发 SIGTSTP 信号;1.3 信号产生的方式1.终端组合按键产生...
2019-05-31 10:05:10 128
原创 Linux高级 2019-5-18上午
1.孤儿进程1.1 产生原因父进程先于子进程终止,就会产生孤儿进程,在某些开发环境下(需要子进程自己申请空间),孤儿进程的危害远远大于僵尸进程,因为孤儿进程充满了不确定性。1.2 创建一个孤儿进程#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main(){ // 创...
2019-05-27 09:06:57 112
原创 Linux高级 2019-5-12下午
1.mmap内存共享映射1.1 消息队列分为两种1.SYSTEMVPOSIX1.2 主要功能通过文件进行进程间通信1.3 文件是该技术的主要载体,利用对文件的映射与SYNC同步技术实现1.4 映射条件文件大小绝对不能为01.5 共享映射过程1.进程A申请映射内存,映射内存通过同步技术(SYNC)映射到映射文件中;则映射内存中的数据就会保存到映射文件中;2...
2019-05-27 09:06:03 101
原创 Linux高级 2019-5-12上午
1.匿名管道1.1 匿名管道,用于进程间通信通过函数 pipe() 实现匿名管道;1.2 函数 pipe()函数形式: int pipe(int pipefd[2]);参数: 一个数组;1.3 调用 pipe() 函数后在内核空间创建一个内核缓冲区,这个缓冲区是进程共有的,为4096byte的环形队列1.4 进程打开一个文件,会与三个表发生关联:文件描述符表、文件表、索引节点...
2019-05-27 09:05:23 125
原创 Linux高级 2019-5-11下午
1.并发1.1 并发的优点:使用多进程的并发程序,可以大大提高程序的执行效率,缩短任务完成的时间1.2 并发性概述:并发是指多进程共同完成指定任务可以比单进程获取CPU使用权的概率更大,及时得到更多的时间片,从而加快完成任务的速度1.3 串行的概念从任务的起始位置执行至末尾位置,有次序地执行。1.4 并行的概念依赖于硬件支持,有多少核心处理器就有多少并行数量,单核无法进行并...
2019-05-27 09:04:44 108
原创 Linux高级 2019-5-11上午
1.wait函数与waitpid函数1.1 这两个函数的功能进程回收,对僵尸进程进行检测和回收1.2 僵尸进程产生的原因子进程先于父进程终止,父进程没有对子进程进行回收,就会产生僵尸进程1.3 在子进程回收时,内核会回收用户空间资源,同时系统对子进程的内核空间绝大多数资源进行回收释放,但是仍然会有 PCB 残留PCB 不回收会对系统造成影响,可能导致创建进程失败。1.4 ...
2019-05-27 09:04:04 132
原创 Linux高级 2019-5-4下午
1.fork函数1.1 进程的创建1.fork 是一个 Linux API , Linux 或 unix 系统进程之间具有很强的亲缘关系(父子关系);2.调用 fork 的是父进程,创建的新进程称为子进程;3.调用 fork 能够创建一个新的进程;1.2 系统初始化进程 init(pid为0或1) 进行称为 根进程1.3 父进程创建子进程后,内核对子进程进行初始化(按照父进程对子进...
2019-05-27 09:03:32 94
原创 Linux高级 2019-5-4上午
1.进程基础1.1 PCB进程控制块1.在 Linux 下,每一个进程都有一个 PCB ,其是一个描述了进程所有详细信息的结构体,比如 pid 、 栈信息 等;1.2 程序是静态表现(占用物理磁盘空间);进程是该程序运行后的动态表现(占用物理内存空间,具有CPU使用权)。1.3 进程的简单形态1.从高地址到低地址分别是: PCB(4G~3G) 、 环境变量/命令行参数(从3G开始)...
2019-05-27 09:03:01 106
原创 Linux高级 2019-4-27下午
1.第三个版本的 makefile1.1 无依赖的功能目标1.由 目标名 和 执行语句 共同组成;2.执行的方法: make 目标名3.本次展示 install clean distclean output 目标;在 src 文件夹下的 makefile 中添加以下代码;install: sudo cp app /usr/binclean: rm *.o -r rm app...
2019-05-27 09:01:15 183
原创 Linux高级 2019-4-27上午
1.Makefile项目管理工具1.1 是一种项目管理脚本语言1.优点1.便于编译管理代码;2.节省编译时间(生成.o文件的时间);3.复用性强;1.2 项目编译链接流程1.首先由多个 .c 文件生成对应的 .o 文件;2.其次根据 main.c 文件生成 _START 文件;3.由 _START 文件通过 ld链接器 链接库文件,生成 a.out 可执行文件;1...
2019-05-27 09:00:44 136
原创 操作系统与网络 2019-4-19
1.添加部分新文件1.1 给 DlgMain 对话框上添加两个按钮: 开始直播 按钮和 停止直播 按钮1.2 本次直播项目中使用的是 FFMPEG 来处理视频,视频是通过 h264 进行编码的(进行编码的原因是每一帧图像较大,每秒想发送25帧图像,因此占用的网络资源较大,需要编码进行减小占用的网络资源)1.3 本次直播项目中使用的是 WSAAPI 获取音频,并将音频进行 aac 编码1.4...
2019-05-27 08:59:17 140
原创 操作系统与网络 2019-4-18
1.完成登陆按钮1.1 登录按钮里的代码与注册按钮中的类似1.从对话框上获取信息;2.使用kernel发送登陆的请求数据包;void CAuthorDlg::OnBnClickedButton2(){ UpdateData(TRUE); STRU_LOGIN_RQ slr; slr.m_n_type = _DEF_PROTOCOL_LOGIN_RQ; slr.m_sz_ro...
2019-04-18 23:51:35 161
原创 操作系统与网络 2019-4-17
1.Author 端1.1 新建一个基于对话框的MFC应用程序1.使用宽字符集;2.将之前写的 Net 中的文件与 Kernel 中的文件拷贝过来;3.添加两个筛选器;4.在添加的两个 TCPKernel.cpp 与 TCPNet.cpp 文件头添加上 stdafx.h 的引用,不然运行程序会出错;5.给项目添加 附加包含目录 ,将 Net Kernel 以及 PackDef 的路径...
2019-04-18 23:51:10 100
原创 操作系统与网络 2019-4-16
1.继续完成服务器1.1 完成注册请求函数 RegisterRq1.获取注册请求的结构体对象;2.定义SQL语句数组;3.定义注册回复结构体对象;4.给回复对象的结构体协议头赋值;5.获取用户信息,并将用户信息放入数据库中;6.判断来的数据包是主播的还是观众的,两个数据存储的位置不同,因此需要进行判断;7.若为主播,拼接SQL语句;8.若注册成功则分配room;9.观众与主播...
2019-04-18 23:50:42 115
原创 操作系统与网络 2019-4-15
1.在数据库中存储信息1.1 添加三个表1.author:用来存放主播的id、登陆密码、用户名;2.audience:用来存放观众的id、登陆密码、用户名;3.room:用来存放房间的id、房间名name、对应的主播;1.2 在MySQL中创建上面三个表1.新建author表,添加 a_id 属性,类型为BIGINT(11),选择前两个选项 PK NN ;添加 a_name 属性...
2019-04-18 23:50:09 202
原创 Linux与数据结构 2019-4-14
1.KMP查找算法1.1 用途给定一个主串,一个查找串,需要找到查找串在主串中第一次出现的位置(下标)。1.2 方法要求主串不回头(就是只想主串的指针不向后移动),查找串(匹配串)回头跳转。这是一种以空间换时间的方法。1.3 串的前缀与后缀1.字符串的前缀是指字符串的任意首部,比如字符串“abbc”的前缀有 a ab abb ;2.字符串的后缀是指字符串的任意尾部,比如字...
2019-04-18 23:49:38 202
原创 Linux与数据结构 2019-4-13
1.堆排序1.1 优化堆排序#define swap(a, b) {a=a^b;b=a^b;a=a^b}void Adjust2(int arr[], int len, int n_root_id){ int MAX; for(MAX = LEFT; MAX < len; MAX = LEFT) { // 有两个孩子 if(RIGHT < len) { ...
2019-04-18 23:46:58 94
原创 操作系统与网络 2019-4-12
1.完成服务器1.1 建立一个Win32应用程序,添加一个main.cpp文件1.2 在main.cpp文件的上一层文件夹下创建 Kernel 、 ThreadPool 、 MySQL 、 Net 、PackDef 文件夹1.3 给项目添加筛选器 Kernel 、 ThreadPool 、 MySQL 、 Net 、PackDef ,并将相关文件添加进去1.4 给Kernel添加一个基类 ...
2019-04-18 23:45:32 225
原创 操作系统与网络 2019-4-9
1.复习进程1.1 4G内存如何分配?1.2 哪些是在内核模式进行分配的?内核对象是在内核模式分配的1.3 用户模式1.4 空指针模式调试程序时使用1.5 进程间通信的方式1.管道:通常指无名管道,是 UNIX 系统IPC最古老的形式。1.是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端;2.只能用于具有亲缘关系的进程之间的通信(也是父子进程或者...
2019-04-18 23:45:03 96
原创 操作系统与网络 2019-4-8
1.MySQL1.1 存储过程1.存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它;2.创建一个存储过程drop procedure if exists SLAMProced;delimiter \\cre...
2019-04-15 14:20:11 144
原创 Linux与数据结构 2019-4-7
1.快速排序1.1 快速排序的第二种方法:区间分割;1.给定标准值,定义一个小区间,当元素比标准值小时,小区间扩张;int Sort(int arr[], int n_low, int n_high){ int n_small = n_low - 1; for(n_low; n_low < n_high; n_low++) { if(arr[n_low] < a...
2019-04-15 14:19:37 81
原创 操作系统与网络 2019-4-4
1.MySQL1.1 练习题第五题问题:查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩1.首先考虑,这是要关联两个表的操作select student.snum, student.sname, count(sc.cnum), sum(sc.score) from studentleft join sc on student.snum = sc.snumgroup by...
2019-04-06 23:23:08 363
原创 操作系统与网络 2019-4-3
1.MySQL1.1 统计男生的个数1.首先显示的是student.ssex,这个属性在表student中,条件是ssex=‘男’;select count(ssex) from student where student.ssex = '男';2.统计女生的个数select count(ssex) from student where student.ssex = '女';...
2019-04-06 23:22:40 212
原创 操作系统与网络 2019-4-2
1.MySQL1.1 创建一个表create table student_info( s_id int primary key, # 主键约束,不能有重复的,不能为空,一个表中只有一个主键 s_name varchar(45) unique, # 唯一约束,不能有重复的 # s_age int check(s_age between 1 and 100), ...
2019-04-06 23:22:07 274
原创 操作系统与网络 2019-4-1
1.继续 IOCP 完成端口1.1 完成线程处理函数1.我们需要使用函数 GetQueuedCompletionStatus 来观察 完成端口 的 完成队列 的状态,因此提前定义好需要的变量: DWORD dw_recv_size = 0; ; ULONG_PTR u_key = 0 ; MyOverlapped* p_mol = 0 ;2.在循环中查看 完成队列 的状态;3.若 p_m...
2019-04-06 23:21:20 127
原创 Linux与数据结构 2019-3-31下午
1.算法1.1 计数排序1.应用场景:用于元素比较多并且最大值元素和最小值元素相差不大的情况下,各元素之间可以相等且可以有多个;2.核心思想:使用一个计数数组来统计所有的元素的个数,之后按照下标的位置来将元素放到之前的数组中去;3.排序之前的数组和排序之后的数组理论上来说不是同一个数组,因为我们对其进行了赋值操作;void CountSort(int arr[], int len)...
2019-04-02 07:43:24 73
原创 Linux与数据结构 2019-3-31上午
1.首先根据昨天下午的小测试进行解题思路的答复1.1 整理好了上传2.算法2.1 推荐一本书 算法导论2.2 冒泡排序1.冒泡排序就是比较两个相邻的元素的大小,并按照小的在前,大的在后的规则进行循环排列;void BubbleSort(int arr[], int len){ if(arr == NULL || len <= 0)return; int i, j; ...
2019-04-02 07:43:01 70
原创 Linux与数据结构 2019-3-30下午
1.图1.1 图的广度遍历BFS1.首先我们考虑,任选一个顶点v1,从给定的顶点v1开始在邻接矩阵中找跟其相关的顶点,存入辅助队列中;void BFS(Graph* p_graph, int begin_vertex){ if(p_graph == NULL)return; // 申请辅助队列 Queue* p_queue = NULL; q_Init(&p_queu...
2019-04-02 07:42:11 70
原创 Linux与数据结构 2019-3-30上午
1.图1.1 图的存储方式一般有两种:邻接矩阵和邻接向量,本次采用邻接矩阵的形式创建一个图1.我们考虑,对于一个有3个顶点并且全连通的无向图,共有三条边,邻接矩阵为:0 1 11 0 11 1 02.我们首先定义一个结构体,其中包括图的边、顶点、以及一个数组(按上面的邻接矩阵,这个数组的大小为 1x9);typedef strct graph{ int n_vertex...
2019-04-02 07:40:35 77
原创 操作系统与网络 2019-3-29
1.总结1.1 处理网络收发数据我们分为两大类:同步和异步1.2 同步包括 同步非阻塞多线程 、同步选择(select函数)1.3 异步包括 AsyncSelect(异步选择)、 EventSelect(异步事件选择)1.4 异步选择 AsyncSelect 是基于消息的,因此效率较低;而 异步事件选择 EventSelect 则是基于事件的,效率较高2.输入输出完成端口(IOCP)1...
2019-04-02 07:39:52 140
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人