概述 VxWork系统任务 任务调度 任务创建和管理 任务的错误状态 任务异常处理 共享代码和重入 概述 现代实时操作系统是基于多任务和任务间通信的概念的.多任务环境运行一个实时进程RTP可以被作为一系列相互独立的任务集,每一个任务都有自己的执行线程和系统资源.任务是VxWorks调度的基本单元.所有任务,不管是在内核中,还是进程中,使用相同的调度(VxWorks进程本身不被调度). 任务的概念与其他操作系统的线程概念比较类似.多任务为应用程序对多个孤立的实时事件的控制和反应对提供了基础.在单核…
VxWorks的系统任务 VxWorks在引导时启动的系统任务依赖于配置,有些总是运行.任务集与VxWorks的基本配置相关,很少的任务常用于可选的组件. 注意:别挂起.删除或改变任何系统任务的优先级.否则将导致不可预期的系统行为. 基本VxWorks任务 Root Task 任务名称 tRootTask 优先级 0 触发事件 系统启动 组件 N/A 描述 是第一个被内核执行的任务.入口函数是usrRoot,它初始化大部分VxWorks的功能.通常该任务在所有初始化完成之后终止. 它启动tLog…
中断服务程序 ISR 硬件中断处理是实时系统的关键,因为它是外部时间通知系统的方式. ISR亦称为中断处理函数,是对中断的正确响应.可以使用任何ISR连接到任何没有被VxWorks使用的中断上.当关联的中断发生时,VxWorks运行ISR:ISR的处理不会延迟,除非你配置系统去延迟. VxWorks的ISR配置 默认支持ISR.但是,中断栈和额外特征可以被配置.此外,ISR的延迟支持和显示函数支持可以被增加到系统. 配置中断栈 所有中断使用相同的中断栈.栈在系统启动时更加配置参数来分配和初始化.…
#1 什么是内核应用程序? #2 开发内核应用程序注意事项 什么是内核应用程序? 内核应用程序不同于RTP程序,它允许在内核态,与操作系统使用相同的地址空间.因此,它与操作系统会相互干扰.它可以编译成内核应用程序模块,亦可以与操作系统映像静态连接生成一个映像.应用程序模块可以被动态加载,因此在开发和调试阶段非常有用,它不必重新编译操作系统映像,并且可以存放在任何内核支持的文件系统中,如NFS,使用ROMFS文件系统的FLASH或ROM中,或磁盘上.但是,与操作系统静态链接显然更适合生产使用. 由…
什么是Small-footprint? Small-footprint常见关键配置? 如何配置Small-footprint? 什么是Small-footprint? Small-footprint配置是专门为最小化内核功能和小内存而设计的系统,最少内核功能及最小内存占用. Small-footprint所支持的内核功能 中断管理 系统时钟 任务管理 信号量互斥 可选功能:二进制信号量及kprintf() Small-footprint不支持的功能 动态内存分配,(即不支持malloc等函数)…
POSIX能力 VxWorks扩展了POSIX,为了移植,VxWorks提供了额外的POSIX接口作为可选组件.VxWorks实现了POSIX 1003.1(POSIX .1)一些传统接口以及POSIX.1可选功能中的一些实时接口. POSIX和实时系统 VxWorks提供了很多POSIX兼容的API,但并非全部POSIX API都适合嵌入式和实时系统,或完全兼容VxWorks操作系统.因此,VxWorks在少量情况下强加了以下很小的限制来满足实时系统和VxWorks兼容. 交换内存到磁盘不适合…
Signals 信号是操作系统用于异常处理和异步控制流的关键.在很多方面,信号相当于软件方面的硬件中的中断.操作系统产生的信号包括总线错误和浮点处理异常.信号也提供了API来管理和产生信号.在应用程序中,信号是最合适用来处理异常,而不是为了任务间通信.常见用法包括kill进程和任务,当定时器触发时发送事件或消息到消息队列时发送事件等. 为了兼容POSIX,VxWorks支持63种Signals,每个Signal都有独一无二的标识值和默认的处理(定义在signal.h).值0用于表示NULL的si…
5.1 介绍 针对C++的VxWorks配置 C++头文件 使用C++启动任务 C和C++之前调用代码 C++编译器说明 在信号处理和ISR中使用C++ 下载C++编写的内核模块 C++编译器的不同 命名空间 C++异常处理 C++示例 介绍 注意:风河C++编译器与GNU C++二进制文件不兼容. 针对C++的VxWorks配置 默认情况下,VxWorks只包含了最小的C++支持.可以通过包含所有或部分组件来支持C++的全部或部分功能, INCLUDE_CTORS_DTORS 默认包含了该组件…
#1 内核对象的静态实例化 内核对象的静态实例化 任务的静态实例化 VX_TASK宏用来在编译时声明一个任务对象.该宏带有2个参数:任务名和栈大小.不像taskSpawn函数,任务名称可以是NULL.VX_TASK的任务名称必须指定.栈大小是非零值并且是编译时常量. VX_TASK_INSTANTIATE宏被VX_TASK用来初始化和创建任务,等价于taskSpawn函数的功能.VX_TASK_INITIALIZE宏杯VX_TASK初始化任务并让任务处于SUSPEND状态,直到稍后调用taskA…
三年之前就买了<Java编程思想>这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第一章到第十章的内容,这一次记录的是第十一章到第十六章的内容,写<Java编程思想>读书笔记一的时间还是2022-01-26,没注意又拖这么久了,本文还是会把自己感兴趣的知识点记录一下,相关实例代码:https://gitee.com/reminis_com/thinking-in-java 第十一章:持有对象 如果一个程序只包含固定…
成员初始化 Java尽力保证:所有变量在使用前都能得到恰当的初始化. 对于方法的局部变量,Java会以编译时报错的形式贯彻这种保证,比如: void f() { int i; //这里编译时就会报错,未初始化 } 但是如果是类的数据成员,情况会有所不同.类的每个基本类型数据成员会保证一个默认初始值,通常为0,布尔型就是false,引用类型会为null. 指定初始化 (1 直接在类里定义时写变量等于多少(这样在C++中是不允许的)如, public class initialV { int a=1…
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17288243 加锁(synchronized同步)的功能不仅仅局限于互斥行为,同时还存在另外一个重要的方面:内存可见性.我们不仅希望防止某个线程正在使用对象状态而另一个线程在同时修改该状态,而且还希望确保当一个线程修改了对象状态后,其他线程能够看到该变化.而线程的同步恰恰也能够实现这一点. 内置锁可以用于确保某个线程以一种可预测的方式来查看另一个线程的执行结果.为了确保所有的线程都能看到…
算术操作符 加减乘除这些算术操作中的每一种都必须借助于相应的操作符才能完成.操作符是JavaScript为完成各种操作而定义的一些符号.等号(=).加号(+).减号(-).乘号(*).除号(/). 下面是一个简单的加法操作: 1 + 4 还可以把多种操作组合在一起: 1 + 4 * 5 为避免产生歧义,可以用括号把不同的操作分隔开来: 1 + (4 * 5) (1 + 4) * 5 变量可以包含操作: var total = (1 + 4) * 5; 还可以对变量进行操作: var temp_f…
<Linux/Unix系统编程手册>读书笔记 目录 在Linux里,万物皆文件.所以文件系统在Linux系统占有重要的地位.本文主要介绍的是文件的属性,只是稍微提及一下文件系统,日后如果有更深入的研究一定会写出来. 下图为磁盘分区与文件系统的关系 文件系统中的文件(目录)在i-node表上都有唯一的记录(i-node).i-node通过数据块指针指向数据块,这些数据块就是该i-node对应的文件的数据. i-node与数据块的关系如下: 因为Linux支持很多类型的文件系统,但是每种文件系统的…
<Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候都会发生缓冲.通过缓冲可以在一定程度上将用户空间与实际的物理设备分离,还可以减少内核访问磁盘的次数. 先来看看关于内核缓冲区高速缓冲:read和write调用在对磁盘文件进行操作的时候不会直接访问磁盘,如下图所示. 例如:write(fd, "abc", 3) write调用会将"…
<Linux/Unix系统编程手册>读书笔记 目录 第6章 这章讲进程.虚拟内存和环境变量等. 进程是一个可执行程序的实例.一个程序可以创建很多进程. 进程是由内核定义的抽象实体,内核为此实体分配执行程序所需的系统资源. 从内核的角度来看,进程是由用户内存空间和内核数据结构组成的.程序的代码和代码中的变量存放在用户内存空间,内核数据结构用于维护进程状态信息. 对于每个进程都有一个唯一的进程号(进程ID)(正数),用来标识系统中的某个程序. getpid(),返回调用该函数的进程的进程ID. #…
<Linux/Unix系统编程手册>读书笔记 目录 最近这一个月在看<Linux/Unix系统编程手册>,在学习关于Linux的系统编程.之前学习Linux的时候就打算写关于Linux的学习记录,因为觉得自己学得不好,老是写不出东西.但是现在觉得学习记录应该坚持写,慢慢就会有收获,坚持写才可以锻炼自己的表达能力. <Linux/Unix系统编程手册>这本书的评价很高,但是个人觉得翻译得不太好.其实终究是因为自己的英文阅读能力太差和没什么钱,只能看翻译版.看了接近一个月,…
<Linux/Unix系统编程手册>读书笔记1  (创建于4月3日,最后更新4月7日) <Linux/Unix系统编程手册>读书笔记2  (创建于4月9日,最后更新4月10日) <Linux/Unix系统编程手册>读书笔记3  (创建于4月15日) <Linux/Unix系统编程手册>读书笔记4  (创建于4月20日) <Linux/Unix系统编程手册>读书笔记5  (创建于4月22日) <Linux/Unix系统编程手册>读书笔记…
<Linux/Unix系统编程手册>读书笔记 目录 第11章 这章主要讲了关于Linux和UNIX的系统资源的限制. 关于限制都存在一个最小值,这些最小值为<limits.h>文件中的常量. 通过cat 命令查看: lancelot@debian:~/Code/tlpi$ cat /usr/include/limits.h /* Copyright (C) 1991, 1992, 1996, 1997, 1998, 1999, 2000, 2005 Free Software Fo…
<Linux/Unix系统编程手册>读书笔记 目录 第9章 这章主要讲了一堆关于进程的ID.实际用户(组)ID.有效用户(组)ID.保存设置用户(组)ID.文件系统用户(组)ID.和辅助组ID. 实际用户ID决定执行者是谁. 有效用户ID决定该进程执行时获取的文件权限.PS:有效用户ID为0的进程拥有超级用户的所有权限. 认识保存设置用户ID(saved set-user-ID)的时候先来看看设置用户ID(set-user-ID)(对于文件的). 如果可执行文件设置了设置用户ID,当该文件执行…
<Linux/Unix系统编程手册>读书笔记 目录 第8章 本章讲了用户和组,还有记录用户的密码文件/etc/passwd,shadow密码文件/etc/shadow还有组文件/etc/group. 每个用户都有唯一的用户名和相关的用户标识符(UID).用户可以属于一个或多个组,每个组都有唯一的组名和相关的组标识符(GID). 用户和组的用途为:1.可以确定各种系统资源的所有权:2.对赋予进程访问上述资源的权限加以控制. 首先来看一下密码文件/etc/passwd lancelot@debia…
<Linux/Unix系统编程手册>读书笔记 目录 第7章: 内存分配 通过增加堆的大小分配内存,通过提升program break位置的高度来分配内存. 基本学过C语言的都用过malloc来分配内存,而malloc都基于brk()和sbrk(). #include <unistd.h> int brk(void *end_data_segment); int *sbrk(intptr_t increment); brk()系统调用会将program break设置为end_dat…
Linux内核设计与实现  读书笔记: http://www.cnblogs.com/wang_yb/tag/linux-kernel/ <深入理解LINUX内存管理> http://blog.csdn.net/yrj/article/category/718110 Linux内存管理和性能学习笔记(一) :内存测量与堆内存  第一篇 内存的测量 2.1. 系统当前可用内存 # cat /proc/meminfoMemTotal:        8063544 kBMemFree:      …
<Linux/Unix系统编程手册>读书笔记 目录 第5章: 主要介绍了文件I/O更深入的一些内容. 原子操作,将一个系统调用所要完成的所有动作作为一个不可中断的操作,一次性执行:这样可以避免竞争状态(两个或多个共享资源的进程或线程的运行结果是一个无法预期的顺序). 以独占方式创建一个文件:对文件是否存在的检查和创建文件属于同一个原子操作.防止新建文件的时候因为检查文件是否存在和新建文件之间发生中断(而其他进程也在新建相同文件名的文件),导致两个进程都认为自己是文件的创建者. 向文件尾部追加数…
搜狐视频的屌丝男士第二季大结局了,惊现波多野老师,怀揣着无比鸡冻的心情啊,可惜随着剧情的推进发展,并没有出现期待中的屌丝奇遇,大鹏还是没敢冲破尺度的界线.想百度些种子吧,又不想让电脑留下污点证据,要知道大洋彼岸有个棱镜计划,只好作罢.不如看看书吧,书中自有颜如玉. 开始本次读书笔记前,先扯两个哲学观点,提高下境界.第一个就是<Data-Intensive Text Processing with mapReduce>读书笔记前言中谈到的,大数据产生了大价值,对应的思想很简单:量变导致了质变.第…
<JavaScript面向对象编程指南(第2版)>读书笔记(一) <JavaScript面向对象编程指南(第2版)>读书笔记(二) 目录 一.基本类型 1.1 字符串 1.2 对象 1.3 原型 1.4 常用数学方法 二.DOM操作 2.1 节点编号.名称以及值 2.2 父节点.子节点和相邻节点 2.3 添加和删除节点 2.4 属性相关 2.5 DOM合集 2.6 DOM遍历 三.其他 3.1 事件 3.2 浏览器检测 3.3 三种弹窗方式 3.4 根据浏览器历史控制前进后退 3.…
title: Java并发编程的艺术读书笔记(2)-并发编程模型 date: 2017-05-05 23:37:20 tags: ['多线程','并发'] categories: 读书笔记 --- 1.并发编程模型的两个关键问题 1.1线程之间如何通信. 通信是指线程之间以何种机制来交换信息.有两种:共享内存和消息传递.在共享内存的并发模型里,线程之间共享程序的公共状态,通过读写内存中的公共状态进行隐式通信.在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过发送消息来显示进行通信.j…
title: Java并发编程的艺术读书笔记(1)-并发编程的挑战 date: 2017-05-03 23:28:45 tags: ['多线程','并发'] categories: 读书笔记 --- 1.多线程不一定就比单线程快,因为线程有创建和上下文切换的开销. 1.1vmstat测试上下文切换次数,Lmbench3测时长 1.2如何减少上下文切换 1.2.1无锁并发编程:多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,可以用一些办法来避免使用锁,如将数据的ID取模分段,不同的线程处理…
<Go并发编程实战>读书笔记-语法概览 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客我们会快速浏览一下Go的语法,内容涉及基本构成要素(比如标识符,关键字,子面量,操作符等)和基本类型(比如bool,byte,rune,int,string等),高级类型(比如数组,切片,字典,接口,结构体等)和流程控制语句(if,switch,for,defer等). 一.基本构成要素 Go的语言符号又称为词法元素,共包括5类内容,即标识符(identifier),关键字(key…
<Go并发编程实战>读书笔记-初识Go语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在讲解怎样用Go语言之前,我们先介绍Go语言的特性,基础概念和标准命令. 一.语言特性 我们可以用几个关键词或短语来概括Go语言的主要特性. 1>.开放源代码 这显示来Go作者开放的态度以及营造语言生态的决心.顺便说一句,Go本事就是用Go语言编写的. 2>.静态类型和编译类型 在Go中,每个变量或常量都必须在声明时指定类型,且不可改变.另外,程序必须通过编译生成归档文件或…