Category: 翻译

Zircon内核对象

Zircon内核对象

Zircon是基于对象的内核。用户模式下的代码基本上都是通过对象句柄与OS资源交互。句柄可以被认为是某个OS子系统与某个资源之间的活动会话。 Zircon动态地管理着如下资源: 处理器时间 内存和地址空间 设备IO内存 中断 信号和等待 应用层内核对象 IPC 通道 套接字 先进先出队列 任务 进程 线程 作业 任务 信号 事件 事件对 互斥对 内存和地址空间 虚拟内存对象 虚拟内存地址区 等待 端口 驱动层内核对象 中断请求 资源 日志 内核对象与LK层 许多内核对象封装了一个或者多个LK层结构体,比如线程对象封装了 thread_t,相反通道对就没有封装任何LK层对象。 内核对象生命周期 内核对象可以被重新计数。大多数的内核对象在系统调用时产生,被句柄持有计数等于1时处于活动状态,句柄绑定这个句柄值作为系统调用的输出。句柄对象一旦被附加到句柄表中,它就处于活动状态了。当句柄从关闭(调用sys_close())它们的句柄表中卸载时就会递减内核对象的计数。通常最后一个句柄被关闭时内核对象计数会等于0,此时会触发析构函数的运行。 当引用对象的新句柄被创建或者(某些内核代码)获取直接指针引用时,计数会递增。所以一个内核对象的生命周期可能会比创建它的进程的生命周期还要长。 调度器 内核对象是一个派生自Dispatcher 并实现了方法的C++类。所以你会看到线程对象的代码在 ThreadDispatcher中。有许多代码只关心通用意义上的内核对象,这种情况下你看到的名字就是 fbl::RefPtr<Dispatcher>。 内核对象安全 原则上说,内核对象没有内在的安全概念,也不会做安全检查。一个单独的进程可能由于同一对象的不同权限拥有两个不同的句柄。 参考更多: 句柄

Android 物联网SDK

Android 物联网SDK

原文链接 支持库 主要包含两方面的支持:外部器件 IO API、用户驱动API 外部器件 IO API实现了相关的工业标准协议和接口,可以让App与传感器和制动元件进行通信。支持的接口主要有:GPIO、PWM、I2C、SPI、UART。 https://developer.android.com/things/sdk/pio/index.html 用户驱动API扩展自Android framework的Service组件,它允许App注入硬件事件到framework层,其他的Apps就可以通过标准的Android API来访问这些事件信息。 https://developer.android.com/things/sdk/drivers/index.html 与AndroidOS相比的变更 应用变化 Android Things中系统应用将不复存在,Content Provider也消失了,所以在开发应用时就不要通过Intent调用如下API了: CalendarContract ContactsContract DocumentsContract DownloadManager MediaStore Settings Telephony UserDictionary VoicemailContract 显示不再是必须 Android Things的应用与传统的应用开发一样,提供了相同的UI工具集来支持显示,在图形模式下窗口会以*真实*全屏的方式显示,没有状态栏和导航栏,即便你从底部滑动也不会出现,整个屏幕完全交由用户操控。 当然了,Android Things的显示屏并不是必须的。在一个无屏的设备上App的activities还是主组件,framework依然会分发输入事件到获得焦点的前台activity上。应用不能通过其他应用的组件(比如service)来接收键盘事件或者移动事件。 主Activity支持 Android Things自动运行一个App在manifest中定义的”home activity”作为系统启动后入口,这个activity必须包含一个由CATEGORY_DEFAULT和IOT_LAUNCHER组成的intent-filter。 为了方便开发,这个activity还需要包含一个CATEGORY_LAUNCHER的intent-filter,这样Android Studio才能在发布和调试时作为默认activity来启动。

Google Services支持的变化 Android Things支持一系列的Google APIs。在这里需要用户输入和授权的API都不支持。下表列出了支持的API和不支持的API: 支持的APIs 不支持的APIs Cast Drive Firebase Analytics […]

POP3协议 中文翻译

POP3协议 中文翻译

翻译:N2Hsu 校对:Nii Ma 3-基本流程: 首先,服务器启动POP3服务监听TCP 100端口; 当客户机要使用这个服务器上的POP3服务时,与POP3服务器建立一个TCP连接; 连接建立后,POP3服务器发送一条问候语; 客户机和POP3服务器就可以进行命令和响应的交互,直到连接关闭或终止。 POP3协议中的命令是一个不区分大小的关键字,后面可能会有一个或多个参数。所有的命令都以一对换行符结尾。关键字和参数都是可打印的ASCII字符。关键字和参数之间、参数与参数之间都用一个空格相隔。关键字为三个或四个字符。每一个参数的长度最长为40个字符。 POP3协议的响应包含一个状态指示码、一个关键字,后面可能会有一些额外的信息。所有的响应都以一对换行符结尾。每个响应的长度最长为512个字符(包含最后的换行符)。当前有两种状态指示码:正确响应(”+OK”)、错误响应(”-ERR”)。服务器必须发送大写的”+OK”和”-ERR”。 某些命令的响应可能会有多行。这种情况遵循如下约定:首先发送第一行和一个换行符,此后要发送的其他行都以一对换行符结尾。当所有的响应行发送完成以后,一个八进制的终止符(ASCII046,字符“.”)加一对换行符的结尾行会被发送出去。如果多行响应中的任意一行开始于终止符,此行就是预填充入终止符的响应行。所以说,多行响应是以五个八进制字符(一对换行符+终止符+一对换行符)结束的。当客户端解释多行响应时需要判断此行是否以终止符开头,如果是并且紧随其后的不是换行符那么此行的第一个字符(终止符)会被剥离;如果是并且后面是换行符,表示POP服务响应完成,包含终止符+换行符的这一行则不会包含在多行响应行中。 POP3的会话期间会经历几个状态。 一旦TCP连接建立,POP3服务器发送了握手信息,会话进入AUTHORIZATION状态。在这个状态中,客户端对POP3服务器发起身份验证。 一旦客户端验证通过后,服务器获取与客户端邮件相关的资源,这时会话进入TRANSACTION状态。在这个状态中,客户端可以对POP3服务器进行相关的操作。 当客户端键入QUIT命令后,会话进入UPDATE状态。在这个状态中,POP3服务器会释放在TRANSACTION状态期间的相关资源,回复goodbye,TCP连接随之关闭。 服务器必须对不可识别的、未实现的、语法错误的命令给出错误的状态指示。服务器必须对处于不合法状态的会话给出错误的状态指示。因为客户端没有统一的方法来区分服务器是否实现某个可选命令或者服务器是否能够执行某个命令。 POP3服务器可能会包含一个非活动自动退出的计时器。计时器的周期最少为10分钟。在计时器一个周期内服务器接收到来自客户端的任意命令时,自动退出计时器应该重新计时。当计时器超时后,会话不会进入UPDATE状态,服务器不会删除消息、不会给予客户端任何响应的关闭TCP连接。 4-AUTHORIZATION 状态 一旦对客户端的TCP连接被打开,POP3服务器就会发送一条问候语,这是一条正确的响应。例子如下: +OK POP3 server ready 此时会话处于AUTHORIZATION状态。客户端和服务器进行身份验证。在本文档中描述了两种认证机制,USERPASS命令和APOP命令。其他的认证机制在[RFC1734]中会有描述。虽然没有一种认证机制是POP3服务器必须支持的,但是它需要最少支持一种认证机制。 一旦服务器通过了客户端发起的某种认证,客户端就有权访问相应的邮箱,此时服务器会给邮箱加上独占访问锁,防止会话在进入UPDATE状态之前邮件被修改或者移除。如果独占锁成功获取,POP3服务器就会给予客户端正确响应的状态指示码,会话进入TRANSACTION状态,此时没有邮件被标记或者删除。如果邮箱由于某些原因无法打开(比如无法获得独占锁、客户端被拒绝访问相应邮箱、邮箱无法被解析),POP3发送错误响应的状态指示码(如果获取到了独占锁但服务器返回了错误响应的状态指示码,服务器必须释放这个锁,拒绝这个命令请求)。返回错误响应的状态指示码后,服务器可能会关闭连接。如果服务器没有关闭TCP连接,客户端可以重新发起认证命令或者发起QUIT命令断开连接。   POP3服务器打开邮箱后,会为每一封邮件指定一个编号,用八进制标记每封邮件的大小。邮箱中的第一封编号为“1”,第二封为“2”,以此类推,第N封邮件编号为N。在POP3的命令和响应中,所有的邮件编号和邮件大小都用BASE10编码(十进制)。 下面是一个AUTHORIZATION状态时QUIT命令的介绍: QUIT 参数:无 限制:无 正确的响应: +OK 例子: C: QUIT S: +OK dewey POP3 server signing off 5-TRANSACTION状态 一旦客户端通过了身份认证,POP3服务器对邮箱成功加锁并且已经打开,会话进入TRANSACTION状态。客户端就可以重复的执行以下的命令。最终客户端发起QUIT命令,会话进入UPDATE状态。 以下是在TRANSACTION状态时的POP3命令: STAT 参数:无 […]