超详细|一篇搞定操作系统——用户接口

2023-05-16

文章目录

  • 6.1 用户接口
  • 6.2 其他特殊操作系统
    • 6.2.1 嵌入式操作系统
    • 6.2.2 分布式操作系统

操作系统全家桶:传送门
一、操作系统引述:https://blog.csdn.net/diviner_s/article/details/108829327
二、处理器管理:https://blog.csdn.net/diviner_s/article/details/108940809
三、存储器管理:https://blog.csdn.net/diviner_s/article/details/112245241
四、设备管理:https://blog.csdn.net/diviner_s/article/details/112250905
五、文件管理:https://blog.csdn.net/diviner_s/article/details/112253441
六、用户接口:https://blog.csdn.net/diviner_s/article/details/112255959

6.1 用户接口

一、用户接口的发展

  • 早期操作系统对外提供的接口很简陋,功能也单一,包括脱机的作业控制语言(或命令)和联机的键盘操作命令。
  • 在分时系统出现后 ,不仅为程序员提供编程服务的系统调用,而且提供功能强大的命令行接口。在一维空间运行。
  • 图形用户接口(常称做图形界面),它是二维空间界面。
  • 现在有不少游戏软件在三维硬件显示卡的支持下实现三维动画效果。

二、用户接口类型

  • 1、程序接口(系统调用接口)
  • 2、命令接口(操作接口)
    • 1)联机用户接口(交互式命令接口)
      命令方式:命令行方式、批处理方式
      图形界面方式
    • 2)脱机用户接口(批处理命令接口)
      作业控制语言/命令
      作业控制说明书

三、程序接口

  • 1、系统调用:是操作系统提供的、系统与用户程序之间的接口,是操作系统提供给程序员的接口,一般位于操作系统核心的最高层。
    • 从感觉上系统调用类似于过程调用,都由程序代码构成,使用方式相同 — 调用时传送参数。
    • 两者有实质差别:过程调用只在用户态下运行,不能进入核心态;而系统调用可以实现从用户态到核心态的转变。
    • 系统调用可分为5个类别:进程控制、文件管理、设备管理、信息维护和通信。

2、库函数:它们本身并不属于操作系统的内核部分,而且运行在用户态下。库函数涉及文件管理、状态信息、文件修改、程序设计语言的支持、程序装入和执行、通信等方面内容。

  • UNIX/Linux系统中系统调用与库函数之间的关系:
    在这里插入图片描述

3、系统调用使用方式:在UNIX/Linux系统中,系统调用和库函数都是以C函数的形式提供给用户的,它有类型、名称、参数,并且要标明相应的文件包含。open系统调用可以打开一个指定文件,其函数原型说明如下:

			#include <sys/types.h>
            #include <sys/stat.h>
            #include <fcntl.h>
            int open(const char *path, int oflags);

不同的系统调用所需要的头文件(又称前导文件)是不同的。下例程序利用fork( )创建子进程,利用getpid( )和getppid( )分别获得进程的PID和父进程PID,使用sleep( )将相关进程挂起几秒钟。

#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <errno.h>
int main(int argc,char **argv)
{   pid_t pid,old_ppid,new_ppid;
    pid_t child,parent;
    parent=getpid();          	/*获得本进程的PID*/
    if((child=fork())<0){
        fprintf(stderr,"%s:fork of child failed:%s\n",argv[0],strerror(errno));
        exit(1);    }
    else if(child==0){       	/*此时是子进程被调度运行*/
        old_ppid=getppid();
        sleep(2);
        new_ppid=getppid();    }
    else {
        sleep(1);
        exit(0);   }          	/*父进程退出*/
    /*下面仅子进程运行*/
    printf("Original parent:%d\n",parent);
    printf("Child:%d\n",getpid());
    printf("Child's old ppid:%d\n",old_ppid);
    printf("Child's new ppid:%d\n",new_ppid);
    exit(0);  
}

4、系统调用的处理方式:

  • 1、一般处理方式:不同版本的UNIX系统提供的系统调用的数目不同,实现它们的汇编代码形式通常都以trap指令开头(在Linux系统中是通过中断指令“INT 0X80”实现的)
    trap指令的一般格式是:
    trap xx
    参数1
    参数2
    ……
    当CPU执行到trap指令时,产生陷入事件。所有的陷入事件有一个总的服务程序,即陷入总控程序。系统调用处理函数根据trap指令后面的系统调用号去查系统调用入口表,然后转入各个具体的系统调用处理程序。
  • 系统调用入口表sysent结构:
    在这里插入图片描述
  • 2、系统调用实现过程:
    在这里插入图片描述

四、命令接口

1、命令的一般使用方式

  • 1)常用shell种类
    Bourne shell(简写sh)
    C shell(简写csh)
    Bourne Again Shell(简写bash)
    Korn shell(简写ksh)
  • 2)shell命令的一般格式
    命令名 [选项] [参数1] [参数2] …
    例如: cp –f file1.c myfile.c
  • 3)使用shell命令时,应注意:
    • 命令名必须是小写的英文字母。
    • 一般格式中由方括号括起来的部分是可选的。
    • 选项是对命令的特别定义,以“-”开始,多个选项可用“-”连起来。
    • 参数提供命令运行的信息或命令执行过程中使用的文件名。
    • 如果命令行中没有提供参数,命令将从标准输入文件(即键盘)上接收数据,输出结果显示在标准输出文件(即显示器)上,而错误信息则显示在标准错误输出文件(即显示器)上。
    • 命令在正常执行后返回一个0值,表示执行成功;而非0值表示失败。
    • UNIX/Linux操作系统的联机帮助对每个命令的准确语法都做了说明。

2、命令解释程序

  • 1)实现方式:命令解释程序的基本功能是接收用户输入的命令,然后解释并且执行。它不是操作系统的内核部分。
    • 实现命令的常见方式:
    • ① 内置方式(内部命令):命令解释程序本身就包含执行该命令的代码。
    • ② 外置方式(外部命令):每条外置命令都对应专门的系统程序,通常以可执行文件的形式存放在磁盘上。外置命令是通过创建子进程,并在子进程的空间中执行的。
      在这里插入图片描述
  • 2)shell程序设计:shell不仅作为命令解释程序出现,它还是一种高级程序设计语言。
    • 【例】由三条简单命令组成的shell程序(文件名为ex1)
      $ cat ex1
      date
      pwd
      cd …
    • 【例】带有控制结构的shell程序(文件名为ex2)
      $ cat ex2
      #!/bin/bash
       # If no arguments, then listing the current directory.
      # Otherwise, listing each subdirectory.
      if  test  $# = 0   then  ls .
      else
         for  i
           do  ls  -l  $i | grep  '^d'
           done
         fi.

3、系统程序:又称标准程序,或者使用程序。是为用户提供的一些公共操作等,常用的有编辑程序、编译程序、调试程序、等等。

  • 系统程序是可以直接使用的。
  • 系统程序大致可包括以下几类:
    文件管理类
    状态信息类
    程序设计语言支持类
    程序的装入与执行支持类
    通信类
    其他软件工具类

4、批处理操作方式:

  • 系统规定了一种特殊的文件,称为批处理文件,例如扩展名为“.BAT”的文件。
  • 首先编辑批处理文件,将需要重复执行或连续执行的若干命令按要求顺序写入批处理文件,然后保存。
  • 操作系统还支持使用特殊的控制命令,编辑和在执行批处理文件时可以使用参数,提高执行处理能力。
  • 需要使用时执行批处理文件就可以。
  • 批处理文件一次建立、可多次执行,方便用户操作,节省时间,减少出错。

5、脱机命令接口:

  • 1)“作业”与“作业步”
  • 2)“作业控制语言”与“作业控制命令”
  • 3)作业控制说明书
  • 4)将“作业控制说明书”和程序、数据等内容一起输入计算机,然后就可以按照作业控制说明书的要求完成作业。
  • 5)用于批处理系统

五、图形用户界面

  • 菜单
  • 图标
  • 窗口
  • 对话框
  • 按钮
  • ……
    在这里插入图片描述

6.2 其他特殊操作系统

6.2.1 嵌入式操作系统

一、嵌入式操作系统概述

  • 嵌入式系统是以应用为中心、以计算机技术为基础的,其软、硬件可裁剪,适用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。
    在这里插入图片描述

1、嵌入式软件系统的体系结构
在这里插入图片描述

2、基本功能

  • 嵌入式内核是操作系统的核心基础和必备部分,其他部分要根据嵌入式系统的需要来确定。
  • 最大特点就是可定制性,即能够提供对内核的配置或裁剪功能,可以根据应用需要有选择地提供或不提供某些功能,以减少系统开销。

3、发展历史

  • 1)无操作系统阶段:主要特点是系统结构和功能相对单一,处理效率较低,存储容量较小,几乎没有用户接口。
  • 2)简单操作系统阶段:主要特点是出现了大量高可靠、低功耗的嵌入式CPU(如Power PC等),并得到迅速发展。
  • 3)实时操作系统阶段:主要特点是操作系统的实时性得到了很大改善,已经能够运行在各种不同类型的微处理器上,具有高度的模块化和扩展性。
  • 4)面向Internet阶段:主要特点是与网络密切结合,大大方便用户使用,系统功能更强,提高安全保护措施。

4、操作系统选择

  • 硬件平台的选择中最重要的是处理器选择,其主要因素包括:处理性能、技术指标、功耗、软件支持等。
  • 软件平台选择的关键点是操作系统的选择。
  • 需考虑的关键点有:所提供的开发工具(如编译器、调试器等)、可移植性、内存要求、可裁剪性、是否提供* 硬件驱动程序、实时性能等。当然,还要选择合适的编程语言以及集成开发环境。

5、嵌入式系统应用开发流程
在这里插入图片描述
二、嵌入式操作系统内核及其实现

1、任务管理与调度

  • 1)任务:任务是一个独立的执行线程,可以与其他的并发任务竞争处理器时间。
  • 2)构建任务模型:在任务模型中,管理用户程序时,是把整个应用看成是一个进程;进行处理时,则将该应用划分为多个任务。
  • 3)任务的组成:① 代码;② 数据;③ 堆栈
  • 4)任务管理:可以通过创建、删除、挂起、解挂、设置优先级等操作对任务进行管理。任务是动态实体,可以处于以下合法状态之一:睡眠、就绪、运行、等待。
  • 5)任务的属性:与任务相关的参数是任务属性。
    包括任务优先级(Priority)、周期(Period)、计算时间(Computation Time)、就绪时间(Ready Time),截止时间(Deadline)等。
    • 截止时间分为:
      硬截止时间(Hard Deadline)
      软截止时间(Soft Deadline)
  • 6)任务的调度算法:多采用基于静态优先级的可抢占式调度。

2、中断与时间管理

  • 1)中断:在大多数嵌入式处理器体系结构中都提供中断机制。
  • 2)时间管理模块:时间管理模块用一个统一的方式来解决,提供定时中断,实现延时和超时控制。
  • 3)中断管理功能
  • 4)时间管理功能
    提供定时中断,即时钟节拍;
    提供日历时间,负责与时间相关的任务管理工作;
    提供软定时器的管理功能。

3、任务的同步和通信

  • 嵌入式系统中使用任务原语实现任务的同步和通信。
  • 1)信号量:在实时操作系统中,信号量可以是一个二值信号量或一个计数信号量。
  • 2)事件:在嵌入式实时内核中,事件是一种表明预先定义的系统状况已经发生的机制。一个或多个事件构成一个事件集。
  • 3)消息:任务间的通信方式可分为直接通信和间接通信。直接通信方式是指在通信过程中,双方必须明确地知道彼此的存在。间接通信方式是指在通信过程中,通信双方不需要指出消息的来源或去向,而通过中间机制进行发送和接收,即邮箱和消息队列。
  • 4)管道:嵌入式系统的管道提供一个简单数据流,当管道空时,阻塞读的任务;当管道为满时,阻塞写的任务。
  • 5)异步信号:异步信号机制也称软中断机制,异步信号又称软中断信号。需要处理异步信号的任务由两部分组成:一个是与异步信号无关的任务主体,另一个是ASR(异步信号服务例程)。对异步信号的主要操作包括:“安装异步信号处理例程”和“发送异步信号到任务”。
  • 6)共享内存:实现任务间通信最常用的方法是使用共享数据结构,尤其是当所有任务都在同一地址空间的条件下。
  • 7)任务间的耦合度:在嵌入式多任务系统中,任务间的耦合程度是不一样的。
  • 8)任务优先级反转:高优先级任务需要等待低优先级任务释放资源的现象,称作优先级反转(Priority Inversion)。

4、内存管理

  • 嵌入式系统对内存管理的普遍要求是最小的碎片、最小的管理负载和确定的分配时间。通常不采用虚拟存储管理,而采用静态内存分配和动态内存分配。
  • 1)考虑因素:内存管理方式简捷,一般不使用虚拟存储技术。内存保护可以有两种方式。一种是平面内存模式;一种是内存保护方式,可以使用防止地址越界和防止操作越权手段。
  • 2)内存管理模式:① 静态分配模式 ② 动态分配模式
  • 3)存储区管理:常用的嵌入式内存管理方式有定长存储区和可变长存储区两种。对分区的操作:创建/删除分区、获得/释放内存块、获取分区ID、获取当前创建的分区数、获取当前所有分区的ID、获取分区信息。
  • 4)内存保护:一般嵌入式系统采用内存管理单元MMU提供的内存保护功能。其保护方式是:如果一个MMU处在嵌入式系统中,则物理地址按页寻址;每个内存页有一组相关的属性,包括:该页是否含有代码或数据;该页是否可读、可写、可执行;该页的CPU访问模式是特权指令模式,还是非特权指令模式。

5、I/O管理

  • 通常,设计一个嵌入式系统的目的就是专门用来控制某些设备,并适应该设备的特殊需求。
  • 嵌入式I/O系统主要由I/O设备、设备驱动程序、I/O子系统组成。
  • I/O设备分为字符设备和块设备。
    每个I/O设备都有一个负责完成简单读/写操作的驱动程序,并为用户程序提供一个有关自身属性的I/O应用编程接口。
  • I/O子系统定义一组标准的I/O操作函数,所有I/O设备驱动程序都支持这个函数集合。

三、嵌入式操作系统实例简介 —μCLinux

1、μCLinux系统架构:

  • μCLinux操作系统主要由三个基本部分组成:引导程序、μCLinux内核(由内存管理、进程管理和中断处理等构成)和文件系统。
    在这里插入图片描述

2、内存管理:它无法使用虚拟存储管理技术及其相应的内存保护技术。μCLinux采用实存管理策略,采用分页存储管理技术。因为系统不含MMU,所以无法使用磁盘交换空间。
3、文件系统:μCLinux系统多采用Romfs文件系统,该文件系统相对简单、占用空间较少。Romfs是只读的文件系统,禁止写操作。
4、多进程管理:μCLinux的进程管理都通过vfork实现。
5、μCLinux本身并不支持特定的实时性应用。通过相应的修改,可以提供基于内核空间和用户空间的硬实时和软实时的系统调用(如RT-Linux或RTAI系统)。

6.2.2 分布式操作系统

一、分布式系统概述

  • 1、分布式系统是多个处理机通过通信线路互连而构成的松散耦合系统,它对用户是透明的。
  • 2、分布式系统的特征:①分布性;②自治性;③并行性;④全局性
  • 3、分布式系统的优点:(1)资源共享 (2)加快计算速度
    (3)可靠性高 (4)方便快捷的通信
  • 4、分布式系统的缺点:主要是可用软件不足,系统软件、编程语言、应用程序以及开发工具相对很少;还存在通信网络饱和或信息丢失以及网络安全问题,方便的数据共享同时意味着机密数据容易被窃取。

二、分布式操作系统概述
1、基本说明:

  • 分布式操作系统是配置在分布式系统上的共用操作系统。用户利用透明的方式访问系统内的远程资源,即用户访问远程资源的方式和访问本地资源相同。

2、分布式操作系统的基本功能:

  • ① 进程管理
  • ② 通信管理
  • ③ 资源管理

3、4种多机系统的比较

  • 1)多处理器系统(Multiprocessor Systems)
    • 每个节点只有一个CPU,所有外部设备都是共享的
    • 共享同一个内存,彼此紧密地耦合在一起
    • 整个系统共享同一操作系统
  • 2)多计算机系统(Multicomputer Systems)
    每个节点除CPU外,还有本地内存和网卡,有时也有用于分页的硬盘
    多计算机的各个节点运行同样的操作系统
    整个系统共享同一个文件系统,集中式管理方式
  • 3)网络系统(Network Systems)
    每个节点是一个完整的计算机,不仅有CPU、内存,还有完整的一组设备。各节点上有本地操作系统,其上加上网络软件,构成网络操作系统
  • 4)分布式系统(Distributed Systems)
    分布式系统有很多特征与网络系统相同。分布式系统是虚拟的单机系统,通常各节点上运行统一的操作系统,利用消息机制实现通信,具备数据迁移、计算迁移和进程迁移等功能。

4、分布式系统的设计目标

  • 1)透明性:分布式系统的一个重要特征是系统的分布性对用户是完全透明的。可在两个层次上实现透明性:①对用户隐藏分布性;②系统对程序透明。分布式系统不同种类的透明性:
    在这里插入图片描述
  • 2)灵活性:分布式操作系统的内核模型有两种:单内核模型和微内核模型。
    • 单内核模型基本上是在现有的集中式操作系统上附加一些网络设施,再集成一些远程服务。
    • 微内核模型是一种新式结构。微内核是操作系统的极小核心。它将各种操作系统共同需要的核心功能提炼出来,形成微内核的基本功能。所有其他的系统服务都通过微内核之外的服务器实现。
    • 分布式操作系统的两种内核模型:
      在这里插入图片描述
  • 3)可靠性:可靠性涉及的方面包括可用性、安全性和容错性。
    ① 可用性表示系统可以正常工作的时间比例
    ② 安全性指文件和其他资源必须受到保护,防止未授权使用。
    ③ 容错性指在一定限度内对故障的容忍程度。
  • 4)高性能:性能指标包括多个方面,如执行速度、响应时间、吞吐量、系统利用率、网络通信能力,等等。通信是影响分布式系统性能的基本问题
  • 5)可扩展性:扩展可分为水平扩展和垂直扩展。水平扩展指添加或移去客户工作站,对系统性能影响很小;垂直扩展指移植到更大的或更快的服务器或多服务器上。

三、分布式操作系统的实现

1、通信问题

  • 在分布式系统中没有共享内存,通过传递消息实现通信。本质上,协议就是规定通信如何进行的一系列规则,在广域分布式系统中这些协议划分为多个层次,每一层都有自己的目标和规则。
  • 基于局域网的系统通常采用客户-服务器模型。针对客户-服务器模型中通信要做大量输入/输出的缺陷,提供了远程过程调用(RPC)方法。
    在这里插入图片描述

2、进程管理

  • 1)进程迁移
    ① 数据迁移(Data Migration):整体传送是把文件整体地从节点B传送到节点A。部分传送仅把用户当前需要的部分文件从节点B传送到节点A。
    ② 计算迁移(Computation Migration):在某些情况下,传送计算比传送数据更有效。
    ③ 进程迁移(Process Migration):进程迁移是计算迁移的逻辑延伸。当一个进程被提交执行时,并不一定始终都在同一节点上运行,整个进程(或者其中一部分)可能在不同的节点上执行。采用进程迁移方式可使各节点的工作负载均衡;加速计算,减少整个进程的周转时间;提高硬件适宜性和软件适宜性;提高远程大量数据访问的效率。

  • 2)同步问题
    时钟同步:系统中的时钟并不需要绝对同步
    事件排序:对系统中所发生的事件进行排序
    前趋关系:若A和B是两个相关事件,并且A在B之前发生,则有前趋关系A→B。
    并发事件:如果两个事件A和B彼此没有前趋关系,即A不先于B,B也不先于A,则称这两个事件为并发事件。唯一重要的是,任何关心两个并发事件的进程都认可某个次序。
    逻辑时钟:表示在进程内部各事件发生先后顺序的惟一记数值。
    一个事件的时间戳就是该事件的逻辑时钟值。

  • 3)互斥问题
    ① 集中式算法:基本思想是,在系统的所有活动进程中选择一个进程作为协调者(即运行在最高网址的机器上的某个进程),由协调者负责对临界区进行管理。

    • 优点:能够实现互斥,不会出现饥饿现象,且易于实现
    • 缺点:
      ① 协调者是单点失效,会使整个系统瘫痪
      ② 大型系统中单一的协调者会成为系统性能的瓶颈

    ② 分布式算法:其思想是,进程想进入临界区时,就建立并发送消息;得到许可,就可以进入临界区。退出临界区时,发送OK消息,并从队列中删除这些进程。

    • 优点:弥补集中式算法的不足
    • 缺点:比集中式算法更慢、更复杂,代价也更高

    ③ 令牌环算法:令牌本身是一种特定格式的报文。进程持有令牌,便能进入临界区。能够正确地实现进程互斥,而且不会出现饥饿现象;但也存在令牌丢失和进程失效两个问题。

3、死锁问题

  • 在分布式系统中从不使用死锁避免方法,也很难实现预防。所以普遍使用死锁检测和恢复方法。
  • 分布式系统采用的死锁检测算法的基本原理与集中式系统相同。

4、文件系统

  • 1)文件传送:文件传送分成上传/下载模式和远程存取模式两种类型。
    在这里插入图片描述
  • 2)目录结构:层次文件系统
    设计分布式文件系统的一个关键问题是,所有机器(和进程)的目录层次结构视图是否完全相同。与之密切相关的一个问题是,是否有一个全局根目录,即所有机器都以它作为根。
  • 3)命名透明性:
    透明性有两种形式 — 位置透明性和位置无关性。
  • 4)文件共享语义
    当多个用户共享同一文件时,必须精确定义读/写语义,以免出现歧义问题。
    对所有操作按绝对时间排序,返回值总是最近的一个,这种模式称做顺序一致性。
    如果进程A修改了某个文件,当A关闭该文件时,它把副本发送给服务器,以后进程执行读操作时就得到新值。这种语义规则称做会话语义。

5、中间件

  • 1)中间件的概念
    中间件用来解决分布系统的异构问题。中间件是位于硬件、操作系统等平台和应用之间的通用服务,这些服务有标准的程序接口(API)和协议。
    中间件是一种独立的系统软件或服务程序,可以帮助分布式应用软件在不同的技术之间共享资源,它位于客户端/服务器的操作系统之上,管理计算机资源和网络通信。
    其主要目的是实现应用与平台的无关性。满足大量应用的需要、运行于多种硬件和操作系统平台、支持分布计算、支持标准的协议、支持标准的接口,这些都是任何一类中间件所具备的特点。
    中间件位于客户机服务器的操作系统之上,管理计算机资源和网络通信。
    中间件是一类软件,而非一种软件
    中间件不仅仅实现互连,还要实现应用之间的互操作
    中间件是基于分布式处理的软件,最突出的特点是其网络通信功能
    中间件使应用程序开发变得更容易,通过提供统一的接口,隐藏异构系统和分布式系统下低级别编程的复杂度

  • 2)中间件在分布式系统中的位置
    在这里插入图片描述

  • 3)中间件结构:中间件在客户–服务器结构中的作用示意图
    在这里插入图片描述

  • 4)几种主要的中间件

    • 数据库访问中间件:数据库访问中间件通过一个抽象层访问数据库,典型技术如Windows平台的ODBC和Java平台的JDBC等。
    • 远程过程调用(RPC):为客户机/服务器分布计算提供支持。
    • 面向消息中间件(MOM):向消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并可基于数据通信进行分布系统的集成。
    • 分布式对象中间件:如Sun的RMI/EJB、Microsoft的DCOM等。
    • 事务中间件:完成事务管理、负载平衡、失效恢复等任务。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

超详细|一篇搞定操作系统——用户接口 的相关文章

  • STM32学习第七天--串口调试助手没弄懂

    啊啊 啊 今天真的好沮丧 调代码足足调了一晚上 xff0c 不知道什么原因工程就是错 xff0c 最后好不容易啊 xff0c 在主函数加了个 include 34 stm32f10x lib h 34 就好使了 xff0c 真不知道为什么
  • swoole 相关

    安装虚拟机 VMware Workstation Pro 安装CentOS CentOS 7 x86 64 Minimal 1708 iso 安装FinalShell 教程地址 安装lnmp 教程地址 服务状态管理命令 1 安装lnmp 2
  • ffmpeg编程:读取摄像头信息,保存为裸yuv420p、yuyv422视频流

    1 源码下载 xff1a https download csdn net download dijkstar 10898462 2 编程环境使用Windows下的QT5 11 minGW32 xff0c 源码中已经放好了fmpeg的bin
  • C中__FILE__ __LINE__的用法

    include lt stdio h gt void main void printf 34 File s Successfully reached line d n 34 FILE LINE Other statements here l
  • ubuntu中添加和删除源

    添加PPA源的命令为 xff1a br sudo add apt repository ppa user ppa name 添加好更新一下 xff1a sudo apt get update 删除命令格式则为 xff1a br sudo a
  • jetson nano 部署yoloV3,yoloV4,yoloV3-tiny,yoloV4-tiny

    系统 ubuntu nbsp nbsp 自带cuda10 0 nbsp 1 下载与安装darknet git clone https github com AlexeyAB darknet cd darknet 2 以下步骤我都在直接进入c
  • 对比first-fit/best-fit/worst-fit/slab以及buddy这几种算法的特点

    以下均为自己对这些算法的理解 xff1a fitst fit算法 First fit算法 xff1a 连续物理内存分配算法的一种 xff0c 将空闲内存块按照地址从小到大的方式连起来 xff0c 具体实现时使用了双向链表的方式 当分配内存时
  • MIT6_0001F16_Pset2

    MIT6 0001F16 Pset2 完成Hangman Game的编写 xff0c 就是一个猜词游戏 span class token comment Problem Set 2 hangman py span span class to
  • 利用python进行数据分析 pdf

    利用python进行数据分析 链接 xff1a https pan baidu com s 1mFg7kB0WG6edKnhumMbbJg 提取码 xff1a 6kos 如果带来帮助 xff0c 可点赞或关注博主 xff01
  • 数据库系统概念第六版 第六章练习题6.11

    6 11 考虑下图所示的关系数据库 xff0c 主码加了下划线 给出关系代数表达式来表达下列的每一个查询 xff1a a 找出First Bank Corporation的所有员工姓名 b 找出First Bank Corporation所
  • 数据库实验4 SQL语言-SELECT查询操作

    数据库实验4 SQL语言 SELECT查询操作 1 首先按照第三章的jxgl数据库的模板创建jxgl数据库并插入数据 xff1a 创建数据库jxgl create database jxgl 创建相应的表 xff1a 创建student表
  • Docker安装RabbitMQ,RabbitMQ Management使用

    上一篇文章介绍了RabbitMQ的一些基本概念 xff0c 如果没看过没了解 xff0c 推荐先去了解一下 xff1a 下面我们一起来安装一下RabbitMQ并且访问一下它的Management吧 我这边是使用了Docker容器来安装和启动
  • 数据库系统概念第六版 第七章练习题 15 22

    数据库第七章理论习题 7 15 为医院构造一个包含一组病人和一组医生的E R图 为每个病人关联一组不同的检查和化验记录 说明 xff1a 医生和病人间存在联系 xff0c 同时病人有特有的检查和化验记录 xff0c 病人有病床 xff0c
  • 操作系统设计思想--主奴思想

    操作系统设计思想 主奴思想 对于操作系统而言 xff0c 如何稳定可靠运行无疑是最重要的 目前的方案均为将用户进程和其他用户进程 将用户进程和操作系统进行分离 实现操作系统可以管理用户进程 xff0c 但用户进程不能侵入内核 xff0c 同
  • 从零开始学GO ---- 错误处理

    从零开始学GO 错误处理 Go 语言通过内置的错误接口提供了非常简单的错误处理机制 error类型接口 在这个接口类型的声明中只包含了一个方法Error Error方法不接受任何参数 xff0c 但是会返回一个string类型的结果 它的作
  • 从零开始学GO ---- 接口

    从零开始学GO 接口 接口是一个编程规范 xff0c 一组方法签名的集合 Go的接口是非侵入式的设置 xff0c 一个具体类型实现接口不需要在语法上显式地声明 xff0c 只要具体类型的方法集是接口方法集的超集 xff0c 就代表该类型实现
  • Golang通过反射对结构体进行赋值和其他操作

    Golang通过反射对结构体进行赋值和其他操作 通过反射可以方便快捷地访问Golang的结构体字段 xff0c 并进行赋值或其他操作 当两个结构体内容相同但名字不同时 xff0c 如何快捷地进行赋值 xff1f 或者内容有交集 xff0c
  • 如何使用github来下载你需要使用的ros资源

    使用ros系统 xff0c 需要用到许多数据包 xff0c 有些时候你需要使用的ROS数据包并没有Debian包的形式 xff0c 这时你需要从数据源安装它 代码开发人员通常使用的有三种主流的版本控制系统 xff1a SVN xff0c G
  • VLC RTSP视频播放终极解决方案

    VLC播放RTSP视频流遇到的问题 摄像头是RTSP协议的 xff0c 需要在Android端实时显示摄像头视频流 xff0c 这里采用了开源的VLC播放器 xff0c 可能会有如下需求 xff1a 一 有截屏的需求 二 有屏幕录制的需求
  • docker push 实现过程

    这一篇文章分析一下docker push的过程 xff1b docker push是将本地的镜像上传到registry service的过程 xff1b 根据前几篇文章 xff0c 可以知道客户端的命令是在api client push g

随机推荐

  • FreeRTOS专题六:支持多优先级

    在 FreeRTOS 中 xff0c 数字优先级越小 xff0c 逻辑优先级也越小 xff0c 这与RT Thread 和 C OS刚好相反 就绪列表 pxReadyTasksLists configMAX PRIORITIES 是一个数组
  • 操作系统中的中断(详细介绍+图片理解)

    中断的概念 中断是指程序执行过程中 xff0c 遇到急需处理的事件时 xff0c 暂时中止CPU上现行程序的运行 xff0c 转去执行相应的事件处理程序 xff0c 待处理完成后再返回原程序被中断处或调度其他程序执行的过程操作系统是 中断驱
  • Android 如何杀死Service

    方法很简单就是用ActivityManager private void killeService List lt RunningAppProcessInfo gt infos TODO 自动生成的方法存根 ActivityManager
  • [自动驾驶]Build a Traffic Sign Recognition Program

    看 准确率98 的深度学习交通标志识别是如何做到的 xff1f 这篇文章的时候 xff0c 发现了udacity的自动驾驶课程 可惜要收费 xff0c 不过课程project在github上有 xff0c 那直接做project就好了 xf
  • 教你快速学习PID控制原理

    教你快速学习PID控制原理 写在前面 在这篇文章中我会通过举例的方式来让大家了解什么是PID控制 xff0c 这篇博客是让大家更加容易的理解PID控制 xff0c 如果大家想要跟深入的了解的话最好是自己上手去做一个关于PID控制的实物 xf
  • opencv HSV找颜色,找轮廓用最小旋转矩形框出

    include lt opencv2 opencv hpp gt include lt iostream gt include lt string gt using namespace cv using namespace std 输入图像
  • FreeRTOS学习笔记——FreeRTOS 任务基础知识

    RTOS 系统的核心就是任务管理 xff0c FreeRTOS 也不例外 xff0c 而且大多数学习RTOS 系统的工程师或者学生主要就是为了使用RTOS 的多任务处理功能 xff0c 初步上手RTOS 系统首先必须掌握的也是任务的创建 删
  • linux c char * char[]相互转换

    1 char 转char 可以直接赋值 char pp 20 61 34 helloworld 34 char p 61 pp 2 char 转char 主要有两种方法可以将char 转换为char 类型 xff0c 分别是 xff1a s
  • GDB改变程序的执行

    1 修改变量值 xff1a set var var name 61 num 最佳 print var name 61 num 2 跳转执行 gdb提供了乱序执行的功能 jump linespec linespec可以是文件的行号 xff0c
  • Linux缓冲区

    所有的磁盘I O都要进过内核的快缓冲区 xff08 内核缓冲区高速缓冲 xff09 xff0c 既然read和write都要被内核缓冲 xff0c 那么 不带缓冲的IO 指的是在用户的进程中对这两个函数不会进行缓冲 xff0c 每次read
  • git忽略本地的已经push过的提交

    先使用如下命令 xff1a span class hljs comment git span span class hljs comment rm span span class hljs literal span span class h
  • 计算机启动过程

    BIOS BIOS做了底层的一些初始化的工作 BIOS的初始化过程 xff1a 在计算机电源刚打开的时候 xff0c 首先会 xff1a 1 硬件自检 2 检查系统中的内存和显卡等关键部件的存在和工作状态 3 查找并执行显卡等接口卡BIOS
  • 系统调用

    系统调用 xff1a 操作系统对上提供服务的接口 通过软中断触发中断 INT和IRET指令用于系统调用 xff0c 系统调用时 xff0c 堆栈切换和特权级的切换 开销 1 引导机制 2 建立内核堆栈 3 验证参数 4 内核态映射到用户态的
  • ERVER CONSOLE DEBUG: onBackendConnect: gdb-server session closed

    Waiting for gdb server to start 2022 08 24T07 08 56 126Z SERVER CONSOLE DEBUG onBackendConnect gdb server session connec
  • Linux离线安装telnet命令

    参考 xff1a https www hangge com blog cache detail 2935 html 一 离线包下载 xff08 1 xff09 首先下载 telnet client 或 telnet 客户端软件包 xff0c
  • 嵌入式开发--CAN总线与高速光耦6N137

    嵌入式开发 CAN总线与高速光耦6N137 6N137简介 CAN总线应用时 xff0c 有时候需要加光耦隔离电路 xff0c 以免在雷击或遇到高压干扰时 xff0c 保护设备安全 常用的有光耦隔离和专用芯片隔离 本文介绍使用高速光耦6N1
  • 处理机调度

    调度算法 第一类就绪队列怎么排 第二类是每一次执行时间的长短的控制 第三类关于多种算法如何综合到一起 先来先服务算法 按着到就绪队列里的先后顺序来排队的在找就绪进程的时候也是按照这个先后顺序来 按先来后到没有考虑到进程的特征 缺点 xff1
  • 死锁产生和预防

    死锁的产生 1 资源是互斥的 资源在同一时刻只有一个进程才能够使用和访问 2 持有并等待 一个进程持有一份资源阻塞等待其它进程释放资源 3 资源不可抢占 只有一个进程使用完资源之后其它进程才能够占有使用 4 循环等待 在等待资源的进程集合中
  • 第一次实验报告:使用Packet Tracer分析HTTP数据包

    姓名 xff1a 刘钰 学号 xff1a 201821121036 班级 xff1a 计算1812 1 实验目的 熟练使用Packet Tracer工具 分析抓到的HTTP数据包 xff0c 深入理解 xff1a HTTP协议 xff0c
  • 超详细|一篇搞定操作系统——用户接口

    文章目录 6 1 用户接口6 2 其他特殊操作系统6 2 1 嵌入式操作系统6 2 2 分布式操作系统 操作系统全家桶 xff1a 传送门 一 操作系统引述 xff1a https blog csdn net diviner s artic