精华内容
下载资源
问答
  • 操作系统基本服务和用户接口
    千次阅读
    2020-09-16 22:17:43

    操作系统基本服务和用户接口

    基本服务

    操作系统主要为应用程序的执行提供良好的运行环境和各种服务。
    比如一些编写和执行程序,数据I/O和信息存取,进程通信服务,差错检测和处理。

    用户接口

    用户接口(User Interface,简称 UI)是系统和用户之间进行交互和信息交换的媒介,它实现信息的内部形式与人类可以接受形式之间的转换。通常指软件接口,一般有命令接口、程序接口、图形接口三种。
    1、命令接口:为了便于用户直接或间接控制自己的作业,操作系统向用户提供了命令接口。命令接口是用户利用操作系统命令组织和控制作业的执行或管理计算机系统。命令是在命令输入界面上输入,由系统在后台执行,并将结果反映到前台界面或者特定的文件内。命令接口可以进一步分为联机用户接口和脱机用户接口。

    2、程序接口:程序接口由一组系统调用命令组成,这是操作系统提供给编程人员的接口。用户通过在程序中使用系统调用命令来请求操作系统提供服务。每一个系统调用都是一个能完成特定功能的子程序。如早期的UNIX系统版本和MS-DOS版本。

    3、图形接口:图形用户接口采用了图形化的操作界面,用非常容易识别的各种图标来将系统各项功能、各种应用程序和文件,直观、逼真地表示出来。用户可通过鼠标、菜单和对话框来完成对应程序和文件的操作。图形用户接口元素包括窗口、图标、菜单和对话框,图形用户接口元素的基本操作包括菜单操作、窗口操作和对话框操作等。

    程序接口与系统调用

    系统调用

    操作系统的主要功能是给应用程序的运行创造良好的环境,为了达到这个目标,内核提供一系列的功能的服务程序,通过这一组称为系统调用的接口呈现给用户,系统调用吧应用程序的请求传至内核,调用相应的服务例程完成所需处理,讲结果返回给应用程序。
    系统调用属于操作系统,系统调用可以很好的用户与硬件分离开来,用户不需要关心硬件如何执行操作,应用程序只有通过系统调用才可以请求系统服务并使用系统资源。

    API、库函数和系统调用

    每个操作系统所提供的一组系统调用虽然功能大同小异,但是其细节不尽相同,如果应用程序直接使用系统调用,至少存在两个问题,一个是接口复杂,一个是应用程序跨平台可移植性受到很大限制。所以,IEEE开发了POSIX标准,为不同平台下的应用程序提供相同的应用程序接口(API)。这个就使得应用程序在不同操作系统之间都有可移植性。
    API:API可以说是库函数、系统调用都有涉及,他是一个函数定义,他强调的是如何通过接口来获得所需的服务,注意,系统调用只是一种API,API可以包含许多,比如BIOS中的中断调用编程接口,C语言中的库函数编程接口等等
    Linux系统在标准C库中,除实现标准C规范所要求的库函数外,为每个系统调用构造一个同名封装函数,把系统调用封装后供用户编程使用。
    库函数其实也属于API一种,比如在执行read()这个函数的时候,会调用库函数执行库函数里面完整的代码来执行。
    这边是API接口及库函数的最基本内容,后续会继续更新

    更多相关内容
  • 用户接口

    万次阅读 2017-04-14 10:46:39
    用户接口(User Interface,简称 UI)是系统和用户之间进行交互和信息交换的媒介,它实现信息的内部形式人类可以接受形式之间的转换。  用户接口是介于用户与硬件而设计彼此之间交互沟通相关软件,目的
    用户接口(User Interface)
    博文目录:
       1,接口含义
       2,接口分类
       3,界面分类
       4,系统调用
    一、接口含义
          用户接口(User Interface,简称 UI)是系统和用户之间进行交互和信息交换的媒介,它实现信息的内部形式与人类可以接受形式之间的转换。
          用户接口是介于用户与硬件而设计彼此之间交互沟通相关软件,目的在使得用户能够方便有效率地去操作硬件以达成双向之交互,完成所希望借助硬件完成之工作,用户接口定义广泛,包含了人机交互与图形用户接口,凡参与人类与机械的信息交流的领域都存在着用户接口。
          用户接口通常指软件接口,一般有命令接口、程序接口、图形接口三种。即在人机联系的硬件设备接口基础上开发的软件。如建立和清除连接、发送和接收数据、发送中断信息、控制出错、生成状态报告表等。
    二、(软件接口)分类
         1.命令接口:为了便于用户直接或间接控制自己的作业,操作系统向用户提供了命令接口。命令接口是用户利用操作系统命令组织和控制作业的执行或管理计算机系统。命令是在命令输入界面上输入,由系统在后台执行,并将结果反映到前台界面或者特定的文件内。命令接口可以进一步分为联机用户接口和脱机用户接口。 
      2.程序接口:程序接口由一组系统调用命令组成,这是操作系统提供给编程人员的接口。用户通过在程序中使用系统调用命令来请求操作系统提供服务。每一个系统调用都是一个能完成特定功能的子程序。如早期的UNIX系统版本和MS-DOS版本。 
       3.图形接口:图形用户接口采用了图形化的操作界面,用非常容易识别的各种图标来将系统各项功能、各种应用程序和文件,直观、逼真地表示出来。用户可通过鼠标、菜单和对话框来完成对应程序和文件的操作。图形用户接口元素包括窗口、图标、菜单和对话框,图形用户接口元素的基本操作包括菜单操作、窗口操作和对话框操作等。
    三、用户界面
        用户界面分为:命令界面、菜单界面、图形用户界面、专家系统界面、网络形式界面
        (1)命令行界面:
    命令行界面为用户提供的是以命令行方式进行对话的方式,如MS—DOS,用户通过在终端上输入简短,有隐含意义的命令行,实现对计算机的操作。
             命令行界面(英语:command-line interface,缩写:CLI)是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。也有人称之为字符用户界面(CUI)。
              通常认为,命令行界面(CLI)没有图形用户界面(GUI)那么方便用户操作。因为,命令行界面的软件通常需要用户记忆操作的命令,但是,由于其本身的特点,命令行界面要较图形用户界面节约计算机系统的资源。在熟记命令的前提下,使用命令行界面往往要较使用图形用户界面的操作速度要快。所以,在现在的图形用户界面的操作系统中,通常都保留着可选的命令行界面。
             虽然现在许多计算机系统都提供了图形化的操作方式,但是却都没有因而停止提供文字模式的命令行操作方式,相反的,许多系统反而更加强这部份的功能,例如Windows就不只加强了操作命令的功能和数量,也一直在改善Shell Programming的方式。而之所以要加强、改善,自然是因为不够好;操作系统的图形化操作方式对单一客户端计算机的操作,已经相当方便,但如果是一群客户端计算机,或者是24小时运作的服务器计算机,图形化操作方式有时会力有未逮,所以需要不断增强命令行界面的脚本语言和宏语言来提供丰富的控制与自动化的系统管理能力,例如Linux系统的Bash或是Windows系统的Windows PowerShell
          (2)菜单界面:
           菜单界面为用户提供一系列可用的选项,用户通过快捷键方式输入字母或者数字来选定指定项或者通过单(双)击鼠标的方式来选定指定项。
          (3)图形用户界面:
       图形用户界面(Graphical User Interface)是指采用图形方式显示的计算机操作用户界面。
               GUI,又称图形用户接口,又称面向对象的界面,以窗口、图标、菜单和对话框的方式为用户提供图形用户界面,例如Apple Macintosh系统和Microsoft Windows系统,用户通过单击鼠标的方式进行相关的操作。
              与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。然而这界面若要通过在显示屏的特定位置,以”各种美观而不单调的视觉消息“提示用户”状态的改变“,势必得比简单的消息呈现花上更多的计算能力。
              GUI的广泛应用是当今计算机发展的重大成就之一,它极大地方便 了非专业用户的使用。人们从此不再需要死记硬背大量的命令,取而代之的是可以通过窗口、菜单、按键等方式来方便地进行操作。而嵌入式GUI具有下面几个方面的基本要求:轻型、占用资源少、高性能、高可靠性、便于移植、可配置等特点。
          (4)专家系统界面:
              专家系统界面也称语音激活界面,它可以通过识别自然语言进行操作。这种方式的关键元素包括语音识别、语音数据输入和语音信息的输出。自然语言处理需要有大内存和高速CPU的强大计算机系统来支持。
           (5)网络形式界面:
              网络形式界面是随Internet的普及应运而生的界面形式,它采用基于Web的规范格式,对于有上网浏览经历的来说,这种操作无需任何培训。

    四、系统的调用
           在计算机的系统中,用户不能直接管理系统资源,所有的资源管理都是由操作系统统一负责的。但是,这并不意味着用户就不能使用系统资源了,实际上用户可以通过系统调用的方式使用系统资源,这种在程序中对系统资源的使用方式被称为系统调用,或者称为应用编程接口(Application Programming Interface,API)
           API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
         (1) Windows API
         API函数包含在Windows系统目录下的动态连接库文件中。Windows API是一套用来控制Windows的各个部件的外观和行为的预先定义的Windows函数。用户的每个动作都会引发一个或几个函数的运行以告诉Windows发生了什么。这在某种程度上很像Windows的天然代码。而其他的语言只是提供一种能自动而且更容易的访问API的方法。当你点击窗体上的一个按钮时,Windows会发送一个消息给窗体,VB获取这个调用并经过分析后生成一个特定事件。更易理解来说:Windows系统除了协调应用程序的执行、内存的分配、系统资源的管理外,同时他也是一个很大的服务中心。调用这个服务中心的各种服务(每一种服务就是一个函数)可以帮助应用程序达到开启视窗、描绘图形和使用周边设备等目的,由于这些函数服务的对象是应用程序,所以称之为Application Programming Interface,简称API 函数。WIN32 API也就是MicrosoftWindows 32位平台的应用程序编程接口。凡是在 Windows工作环境底下执行的应用程序,都可以调用Windows API。
         (2) linux API
         在linux中,用户编程接口API遵循了UNIX中最流行的应用编程界面标准---POSIX标准。POSIX标准是由IEEE和ISO/IEC共同开发的标准系统。该标准基于当时现有的UNIX实践和经验,描述了操作系统的系统调用编程接口API,用于保证应用程序可以在源程序一级上在多种操作系统上移植运行。这些系统调用编程接口主要是通过C库(LIBC)来实现的。

    展开全文
  • 分时系统出现后 ,不仅为程序员提供编程服务的系统调用,而且提供功能强大的命令行接口一维空间运行。 图形用户接口(常称做图形界面),它是二维空间界面。 现在有不少游戏软件三维硬件显示卡的支持下实现三...

    操作系统全家桶:传送门
    一、操作系统引述: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等。
      • 事务中间件:完成事务管理、负载平衡、失效恢复等任务。
    展开全文
  • 【微信小程序用户授权及getUserProfile接口使用

    万次阅读 热门讨论 2021-03-18 11:10:42
    2,2021年4月13日后发布的小程序新版本,无法通过wx.getUserInfo获取用户个人信息(头像、昵称、性别地区),将直接获取匿名数据(包括userInfoencryptedData中的用户个人信息),获取加密后的openIDunionID...

    小程序登录、用户信息相关接口调整说明
    为优化用户的使用体验,平台将进行以下调整:
    1,2021年2月23日起,若小程序已在微信开放平台进行绑定,则通过wx.login接口获取的登录凭证可直接换取unionID
    2,2021年4月13日后发布的小程序新版本,无法通过wx.getUserInfo与获取用户个人信息(头像、昵称、性别与地区),将直接获取匿名数据(包括userInfo与encryptedData中的用户个人信息),获取加密后的openID与unionID数据的能力不做调整。此前发布的小程序版本不受影响,但如果要进行版本更新则需要进行适配。
    3,新增getUserProfile接口(基础库2.10.4版本开始支持),可获取用户头像、昵称、性别及地区信息,开发者每次通过该接口获取用户个人信息均需用户确认。具体接口文档:《getUserProfile接口文档》

    以上说明的核心要点就是废弃下面两个相关代码

    wx.getUserInfo
    <button open-type="getUserInfo"/>
    

    替换成新的代码

    getUserProfile
    

    1、旧版授权方法

    getUserInfo: function(e) {
        // 获取用户信息
        wx.getSetting({
          success(res) {
            if (res.authSetting['scope.userInfo']) {
              console.log("已授权=====")
              // 已经授权,可以直接调用 getUserInfo 获取头像昵称
              wx.getUserInfo({
                success(res) {
                  console.log("获取用户信息成功", res)
                },
                fail(res) {
                  console.log("获取用户信息失败", res)
                }
              })
            } else {
              console.log("未授权=====")
            }
          }
        })
      },
    

    2,新版方法
    (1)在onLoad中,获取openId

      onLoad: function (options) {
        var self = this
        wx.cloud.callFunction({
          name: 'getOpenId',
          complete: res => {
            var openid = res.result.event.userInfo.openId
            // 根据openid查询是否授权
            self.queryAuthByOpenid(openid)
          }
        })
      },
    

    (2)根据openId到云开发数据库user表中查询该用户是否授权,如果已授权就直接显示界面内容,否则弹出授权提示框

     queryAuthByOpenid: function (openid) {
        var self = this
        user.where({
            _openid: openid
          })
          .get({
            success(res) {
              if (res.data.length != 0 && res.data[0].auth) {
                // 已经授权,可直接显示页面信息 
                self.initView()
              } else {
                // 未授权,弹框
                self.showDialog()
              }
            }
          })
      },
    

    此处的dialog使用的是自定义组件,也可以使用微信自带的showModal

       onReady: function () {
        this.dialog = this.selectComponent("#dialog")
      },
      showDialog: function () {
        let dialog = this.dialog
        dialog.showDialog()
      },
    

    在这里插入图片描述
    (3)此时点击授权登陆会触发以下事件,调用新版的getUserProfile方法弹出授权弹框,根据返回的msg判断用户点击了允许还是拒绝,点击拒绝的话就直接toast提示用户,点击允许的话就更新云数据库user表中的auth为true并显示界面内容

    confirmEvent: function () {
        var self = this
        let dialog = this.dialog
        dialog.hideDialog()
        if (!this.data.isAuth) {
          wx.getUserProfile({
            desc: '仅作展示',
            success: function (res) {
            },
            complete: function (res) {
              var msg = res.errMsg
              var index = msg.indexOf('ok')
              if (index == -1) {
                // 拒绝授权
                wx.showToast({
                  title: '您已拒绝授权',
                  image: '../../images/error.png'
                })
              } else {
                // 允许授权 更新auth为true
                self.updateUserAuth(res.userInfo)
                self.initView()
              }
            }
          })
        }
      },
    

    (4)更新用户授权信息。先获取当前用户openId,然后根据openId到user表中查询信息,查不到结果的话就直接新增一条,查到一条结果的话就先删除原有的再新增一条(此处应该改为直接更新记录)

    updateUserAuth: function (userInfo) {
        var self = this
        wx.cloud.callFunction({
          name: 'getOpenId',
          complete: res => {
            var openid = res.result.event.userInfo.openId;
            user
              .where({
                _openid: openid
              })
              .get({
                success(res) {
                  if (res.data.length == 1) {
                    self.deleteAndSaveUser(res.data[0]._id,userInfo)
                  } else {
                    self.saveUser(userInfo)
                  }
                },
                fail(res) {
                  console.log(res)
                }
              })
          }
        })
      },
      deleteAndSaveUser: function (sid,userInfo) {
        var self = this
        user.doc(sid).remove({
          success(res) {
            console.log('remove success')
            self.saveUser(userInfo)
          },
          fail: console.error,
        })
      },
      // 插入用户数据到数据库:_openId,头像,昵称,性别,国家,省份,城市,auth
      saveUser: function (userInfo) {
        user
          .add({
            data: {
              auth: true,
              avatar: userInfo.avatarUrl,
              nickname: userInfo.nickName,
              gender: userInfo.gender,
              country: userInfo.country,
              province: userInfo.province,
              city: userInfo.city,
              createtime: util.formatTime(new Date())
            },
            success: function (res) {
              // res 是一个对象,其中有 _id 字段标记刚创建的记录的 id
              console.log(res)
            },
            fail: console.error,
            // complete: console.log
          })
      },
    

    附一:云函数getOpenId

    // 云函数入口文件
    const cloud = require('wx-server-sdk')
    
    cloud.init()
    
    // 云函数入口函数
    exports.main = async (event, context) => {
      const wxContext = cloud.getWXContext()
    
      return {
        event,
        openid: wxContext.OPENID,
        appid: wxContext.APPID,
        unionid: wxContext.UNIONID,
      }
    }
    

    附二:自定义dialog组件

    dialog.js

    Component({
      options: {
        multipleSlots: true // 在组件定义时的选项中启用多slot支持
      },
      /**
       * 组件的属性列表
       */
      properties: {
        // 弹窗标题
        title: {
          type: String,
          value: '标题' // 默认值
        },
        // 弹窗内容
        content: {
          type: String,
          value: '弹窗内容'
        },
    
        // 弹窗确认按钮文字
        confirmText: {
          type: String,
          value: '确定'
        }
      },
    
      /**
       * 组件内私有数据
       */
      data: {
        // 弹窗显示控制
        isShow: false
      },
    
      /**
       * 组件的公有方法列表
       */
      methods: {
    
        //隐藏弹框
        hideDialog() {
          this.setData({
            isShow: !this.data.isShow
          })
        },
        //展示弹框
        showDialog() {
          this.setData({
            isShow: !this.data.isShow
          })
        },
        isShowing(){
          return this.data.isShow
        },
        /**
        * triggerEvent 组件之间通信
        */
        confirmEvent() {
          this.triggerEvent("confirmEvent");
        },
    
        bindGetUserInfo(e) {
          this.triggerEvent("bindGetUserInfo",{event:e});
        }
    
      }
    })
    
    

    dialog.json

    {
      "component": true,
      "usingComponents": {}
    }
    

    dialog.wxml

    <view class='dialog-container' hidden="{{!isShow}}">
        <view class='dialog-mask'></view>
        <view class='dialog-info'>
            <view class='dialog-title'>{{ title }}</view>
            <view class='dialog-content'>{{ content }}</view>
            <view class='dialog-footer'>
              <button class='dialog-btn'  catchtap='confirmEvent'>{{ confirmText }}</button>
            </view>
        </view>
    </view>
    

    dialog.wxss

    .dialog-mask{
      position: fixed;
        z-index: 1000;
        top: 0;
        right: 0;
        left: 0;
        bottom: 0;
        background: rgba(0, 0, 0, 0.3);
    }
    .dialog-info{
        position: fixed;
        z-index: 5000;
        width: 80%;
        max-width: 600rpx;
        top: 50%;
        left: 50%;
        -webkit-transform: translate(-50%, -50%);
        transform: translate(-50%, -50%);
        background-color: #FFFFFF;
        text-align: center;
        border-radius: 3px;
        overflow: hidden;
    }
    .dialog-title{
        font-size: 36rpx;
        padding: 30rpx 30rpx 10rpx;
    }
    .dialog-content{
        padding: 10rpx 30rpx 20rpx;
        min-height: 80rpx;
        font-size: 32rpx;
        line-height: 1.3;
        word-wrap: break-word;
        word-break: break-all;
        color: #999999;
        text-align: left;
    }
    .dialog-footer{
        display: flex;
        align-items: center;
        position: relative;
        line-height: 90rpx;
        font-size: 34rpx;
    }
    .dialog-btn{
        display: block;
        -webkit-flex: 1;
        flex: 1;
        position: relative;
        color: #3CC51F;
    }
    
    展开全文
  • 操作系统(二)——用户接口

    千次阅读 2020-03-11 22:22:22
    文章目录2.1 命令控制界面接口2.1.1联机命令的类型2.1.2 联机命令接口2.2 Linux系统的命令控制界面2.2.1 登录Shell2.2.2 命令句法2.2.3 常用的基本命令2.2.4 重定向管道命令2.2.5 通信命令2.2.6 后台命令2.3 程序...
  • 就是用户空间应用程序和内核提供的服务之间的一个接口。由于服务是内核中提供的,因此无法执行直接调用;相反,您必须使用一个进程来跨越用户空间内核之间的界限。特定架构中实现此功能的方法会有所不同。因此...
  • 程序 App H5 之间的区别

    万次阅读 多人点赞 2018-11-21 11:35:18
    程序的实现原理 根据微信官方的说明,微信小程序的运行环境有 3 个平台,iOS 的 WebKit(苹果开源的浏览器内核),Android 的 X5 (QQ 浏览器内核),开发时用的 nw.js(C++ 实现的 web 转桌面应用)。 平台 ...
  • Java接口和应用程序接口API的理解

    千次阅读 2019-05-19 18:16:21
    Java接口和应用程序接口API的理解 Java中接口中的方法是抽象方法,API(应用程序接口),他们都是接口。问题是一般的Java接口中的方法是抽象方法,而API中的方法却是可以直接调用的。 1.具体的编程语言中的接口,...
  • 计算机操作系统知识盘点

    千次阅读 2021-06-27 13:00:49
    计算机操作系统知识盘点操作系统是由指挥管理计算机系统运行的程序模板和数据结构组成的一种大型软件系统,其功能是管理计算机的硬件资源和软件资源,为用户提供高效、周到的服务。下面是小编分享的计算机操作系统...
  • 计算机中操作系统是什么的接口

    千次阅读 2021-07-15 02:26:26
    操作系统(Operating System,简称OS)是管理和控制计算机硬件软件资源的计算机程序用户和计算机的接口,同时也是计算机硬件和其他软件的接口。其能管理计算机系统的硬件、软件及数据资源,控...
  • 用户接口与作业管理 &nbsp;一、用户与操作系统的接口  作业控制级接口(命令接口)   用户通过键盘输入或作业中发出一系列命令,告诉OS执行哪些操作。对于不同的作业,控制方式又分为两类: ...
  • linux操作系统 第09章 操作系统接口

    千次阅读 2020-07-21 11:26:36
     9.1 操作系统接口概述9.1.1 作业作业调度  按操作系统的术语,用户是以提交“作业”的形式来使用系统的。因此,操作系统的接口可以看作是用户提交作业的接口。  1. 作业的概念  作业(job)是用户向计算机系统...
  • 系统调用和程序接口

    千次阅读 2016-06-09 09:29:52
    系统调用是操作系统内核和用户态运行程序之间接口,它把用户程序的请求传送至内核,调用相应的 内核函数完成所需的处理,将处理结果返回给用户程序。 系统中各种共享资源都由操作系统统一管理,因此操作系统的...
  • 最近做微信小程序与微信公众号登录合并的接口。整理相关资料以及个人认识的心得写了这篇文章大家一起分享。 首先,简单说下我遇到的问题是我们的程序调用微信小程序得到openid,然后通过openID得到用户的...
  • 微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 正文: ...从 2.3.0 版本开始,跳转至其他小程序前,将统一增加弹窗,询问是否跳转,用户确认后才可以跳转其他小程序。如果...
  • 用户接口 User Interface

    千次阅读 2018-01-08 13:23:26
    用户接口是为了方便用户使用计算机资源所建立的用户和计算机之间的联系。也就是说 用户并没有直接使用计算机资源的权限,而操作系统有这个权限,操作系统可以向用户提供命令、系统调用、图形等形式的接口,完成用户...
  • 内核就是直接控制最底层的硬件,而我们日常所用到的软件,大都是通过内核之外一些程序与内核之间接口完成的,例如WINDOWS API就是为我们提供了应用程序与内核的接口,以实现硬件上的一些操作。操作系统(Operating...
  • 主机dp接口在

    千次阅读 2021-07-24 00:49:24
    接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的方式,就如面向对象程序设计提供的多重抽象化。接口可能也...
  • 程序用户登录架构设计

    万次阅读 2021-05-30 01:04:23
    点击下方“前端开发博客”关注公众号回复“2”加入前端群1. 背景上一篇文章《小程序静默登录方案设计》提到过,小程序可以通过微信官方提供的登录能力方便地获取微信提供用户身份标识,快速建立小...
  • C#.NET3.5高级程序设计第四版高清PDF中文完整版

    千次下载 热门讨论 2011-07-05 10:25:50
    22.5 使用接口抽象数据提供程序  22.6 创建autolot数据库  22.7 ado.net 数据提供程序工厂模型  22.8 ado.net的连接式访问  22.9 使用数据读取器  22.10 构建可重用的数据访问库 22.11 创建控制台ui前端...
  • 大学课程 | 《微机原理与接口技术》知识点总结

    万次阅读 多人点赞 2020-07-22 17:25:40
    微型计算机基础概论第一讲 关于第二讲 微型计算机系统组成第三讲 微机工作过程第四讲 常用数制第五讲 编码第六讲 数及其运算第七讲 基本逻辑运算和逻辑门第八讲 基本逻辑运算及其门电路第二章 微处理器总线第九讲 ...
  • API接口是获取网络服务最便捷的方式,合理地使用AP接口开发项目可以大大提高开发效率,把精力都集中在程序的业务逻辑之上,避免重复造轮子。推荐给大家很赞的第三方API接口: 一、交通出行 快递单号查询 快递鸟- ...
  • 应用程序接口有什么作用

    千次阅读 2019-03-28 10:25:01
    数据封装时,网络分层中的每个层相互之间会用接口进行交互并提供服务,其中应用层与用户之间接口称之为应用程序接口。API实际上是一种功能集合,也可说是定义、协议的集合,无论是那种集合,它的实质都是通过...
  • 微信小程序——获取用户信息

    万次阅读 2019-02-28 21:00:00
    微信小程序可以通过wx.getUserInfo()接口来获取部分用户信息,我们可以参考微信文档之wx.getUserInfo()。 但是通过该接口能获取的数据只有: // 必须是在用户已经授权的情况下调用 wx.getUserInfo({ suc...
  • 微信小程序开发用户授权登录

    万次阅读 多人点赞 2018-11-06 18:24:02
    用于第三方服务器和小程序之间做登录态校验.为了保证安全性,3rd_session应该长度够长,一定有效时间, session_key + openid, key, 为 value, 写入到session存储. 3rd_session写入storage: 后续用户进入小程序,先从...
  • 说到小程序,就很自然的想到vue,我看来,小程序就是vue上做了很多限制,管理而成的。简单来说,因为vue是开源的,所以小程序就是以来微信上的vue,当然这个是基于微信庞大的用户群的基础上生成的,微信也可以从...
  • 登录wx.login(OBJECT)调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的 会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。注:调用 login 会...
  • 操作系统复习——操作系统接口

    千次阅读 2018-06-08 14:19:11
    1:操作系统为了方便用户方便的使用向用户提供了两类接口:用户接口(联机用户接口与脱机用户接口)和程序接口2:程序接口是OS专门为用户程序设置的,它是用户程序取得OS服务的唯一接口。3:系统调用提供用户程序...
  • 程序消息推送至公众号(服务号) 可以通过小程序openid推送到公众号(服务号),要求如下 小程序和公众号的主体需要保持一致 公众号中需要关联小程序...小程序在提交审核之前有三次免费改名的机会,一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 747,473
精华内容 298,989
关键字:

在用户与程序之间提供接口