当前位置: 首页 > news >正文

网站关键词设置多少个Wordpress視頻加密

网站关键词设置多少个,Wordpress視頻加密,wordpress表情,iis网站找不到网页前言 Sparrow RTOS是笔者之前写的一个极简性RTOS#xff0c;初代版本只有400行#xff0c;后面笔者又添加了消息队列、信号量、互斥锁三种IPC机制#xff0c;使之成为一个较完整、堪用的内核#xff0c;初代版本以简洁为主#xff0c;使用数组和表作为任务挂载的抽象数据…前言 Sparrow RTOS是笔者之前写的一个极简性RTOS初代版本只有400行后面笔者又添加了消息队列、信号量、互斥锁三种IPC机制使之成为一个较完整、堪用的内核初代版本以简洁为主使用数组和表作为任务挂载的抽象数据结构对数表版本的Sparrow RTOS总结如下 缺陷 由于数组和表的限制该版本并不支持同优先级和时间片功能设计互斥锁时也受到一定影响而且最大只支持32个任务有许多不便之处。 优点 使用数表存储任务对任务的挂载以位操作和下标操作为主内核简洁小巧执行效率高适用于任务较少、硬件资源少的情况。 链表版本内核的设计 使用链表作为任务挂载的数据结构能够实现同优先级、时间片等功能对任务对象的操作也更加灵活。 链表设计 #mermaid-svg-NhpeYOzWAtPHdXx7 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NhpeYOzWAtPHdXx7 .error-icon{fill:#552222;}#mermaid-svg-NhpeYOzWAtPHdXx7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-NhpeYOzWAtPHdXx7 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-NhpeYOzWAtPHdXx7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-NhpeYOzWAtPHdXx7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-NhpeYOzWAtPHdXx7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-NhpeYOzWAtPHdXx7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-NhpeYOzWAtPHdXx7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-NhpeYOzWAtPHdXx7 .marker.cross{stroke:#333333;}#mermaid-svg-NhpeYOzWAtPHdXx7 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-NhpeYOzWAtPHdXx7 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-NhpeYOzWAtPHdXx7 .cluster-label text{fill:#333;}#mermaid-svg-NhpeYOzWAtPHdXx7 .cluster-label span{color:#333;}#mermaid-svg-NhpeYOzWAtPHdXx7 .label text,#mermaid-svg-NhpeYOzWAtPHdXx7 span{fill:#333;color:#333;}#mermaid-svg-NhpeYOzWAtPHdXx7 .node rect,#mermaid-svg-NhpeYOzWAtPHdXx7 .node circle,#mermaid-svg-NhpeYOzWAtPHdXx7 .node ellipse,#mermaid-svg-NhpeYOzWAtPHdXx7 .node polygon,#mermaid-svg-NhpeYOzWAtPHdXx7 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-NhpeYOzWAtPHdXx7 .node .label{text-align:center;}#mermaid-svg-NhpeYOzWAtPHdXx7 .node.clickable{cursor:pointer;}#mermaid-svg-NhpeYOzWAtPHdXx7 .arrowheadPath{fill:#333333;}#mermaid-svg-NhpeYOzWAtPHdXx7 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-NhpeYOzWAtPHdXx7 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-NhpeYOzWAtPHdXx7 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-NhpeYOzWAtPHdXx7 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-NhpeYOzWAtPHdXx7 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-NhpeYOzWAtPHdXx7 .cluster text{fill:#333;}#mermaid-svg-NhpeYOzWAtPHdXx7 .cluster span{color:#333;}#mermaid-svg-NhpeYOzWAtPHdXx7 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-NhpeYOzWAtPHdXx7 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 双向链表 双向链表 双向链表 双向链表 链表头部 链表头节点 链表节点 链表尾节点 任务链表由头部节点和任务节点两部分组成头部会指向头节点和尾节点头节点到尾节点之间会形成一个环路。 就绪列表设计 链表简化设计如下 #mermaid-svg-C09QcWYfovJLWfcZ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-C09QcWYfovJLWfcZ .error-icon{fill:#552222;}#mermaid-svg-C09QcWYfovJLWfcZ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-C09QcWYfovJLWfcZ .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-C09QcWYfovJLWfcZ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-C09QcWYfovJLWfcZ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-C09QcWYfovJLWfcZ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-C09QcWYfovJLWfcZ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-C09QcWYfovJLWfcZ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-C09QcWYfovJLWfcZ .marker.cross{stroke:#333333;}#mermaid-svg-C09QcWYfovJLWfcZ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-C09QcWYfovJLWfcZ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-C09QcWYfovJLWfcZ .cluster-label text{fill:#333;}#mermaid-svg-C09QcWYfovJLWfcZ .cluster-label span{color:#333;}#mermaid-svg-C09QcWYfovJLWfcZ .label text,#mermaid-svg-C09QcWYfovJLWfcZ span{fill:#333;color:#333;}#mermaid-svg-C09QcWYfovJLWfcZ .node rect,#mermaid-svg-C09QcWYfovJLWfcZ .node circle,#mermaid-svg-C09QcWYfovJLWfcZ .node ellipse,#mermaid-svg-C09QcWYfovJLWfcZ .node polygon,#mermaid-svg-C09QcWYfovJLWfcZ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-C09QcWYfovJLWfcZ .node .label{text-align:center;}#mermaid-svg-C09QcWYfovJLWfcZ .node.clickable{cursor:pointer;}#mermaid-svg-C09QcWYfovJLWfcZ .arrowheadPath{fill:#333333;}#mermaid-svg-C09QcWYfovJLWfcZ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-C09QcWYfovJLWfcZ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-C09QcWYfovJLWfcZ .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-C09QcWYfovJLWfcZ .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-C09QcWYfovJLWfcZ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-C09QcWYfovJLWfcZ .cluster text{fill:#333;}#mermaid-svg-C09QcWYfovJLWfcZ .cluster span{color:#333;}#mermaid-svg-C09QcWYfovJLWfcZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-C09QcWYfovJLWfcZ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 链表数组Index 链表头部Index1 任务节点 链表头部Index2 任务节点 链表头部Index3 任务节点 实际设计 #mermaid-svg-bfCdYGTlSweI3CJW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-bfCdYGTlSweI3CJW .error-icon{fill:#552222;}#mermaid-svg-bfCdYGTlSweI3CJW .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-bfCdYGTlSweI3CJW .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-bfCdYGTlSweI3CJW .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-bfCdYGTlSweI3CJW .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-bfCdYGTlSweI3CJW .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-bfCdYGTlSweI3CJW .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-bfCdYGTlSweI3CJW .marker{fill:#333333;stroke:#333333;}#mermaid-svg-bfCdYGTlSweI3CJW .marker.cross{stroke:#333333;}#mermaid-svg-bfCdYGTlSweI3CJW svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-bfCdYGTlSweI3CJW .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-bfCdYGTlSweI3CJW .cluster-label text{fill:#333;}#mermaid-svg-bfCdYGTlSweI3CJW .cluster-label span{color:#333;}#mermaid-svg-bfCdYGTlSweI3CJW .label text,#mermaid-svg-bfCdYGTlSweI3CJW span{fill:#333;color:#333;}#mermaid-svg-bfCdYGTlSweI3CJW .node rect,#mermaid-svg-bfCdYGTlSweI3CJW .node circle,#mermaid-svg-bfCdYGTlSweI3CJW .node ellipse,#mermaid-svg-bfCdYGTlSweI3CJW .node polygon,#mermaid-svg-bfCdYGTlSweI3CJW .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-bfCdYGTlSweI3CJW .node .label{text-align:center;}#mermaid-svg-bfCdYGTlSweI3CJW .node.clickable{cursor:pointer;}#mermaid-svg-bfCdYGTlSweI3CJW .arrowheadPath{fill:#333333;}#mermaid-svg-bfCdYGTlSweI3CJW .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-bfCdYGTlSweI3CJW .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-bfCdYGTlSweI3CJW .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-bfCdYGTlSweI3CJW .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-bfCdYGTlSweI3CJW .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-bfCdYGTlSweI3CJW .cluster text{fill:#333;}#mermaid-svg-bfCdYGTlSweI3CJW .cluster span{color:#333;}#mermaid-svg-bfCdYGTlSweI3CJW div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-bfCdYGTlSweI3CJW :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 双向链表 双向链表 双向链表 双向链表 双向链表 双向链表 双向链表 双向链表 双向链表 双向链表 双向链表 双向链表 链表头部Index1 任务头节点 任务节点 任务尾节点 链表头部Index2 任务头节点 任务节点 任务尾节点 链表头部Index3 任务头节点 任务节点 任务尾节点 任务节点通过链表进行挂载那么怎么找到任务对象的起始地址呢 请读者想一想任务对象的成员都是已知的所以我们完全可以用链表节点的地址减去前面的成员的地址就能得到任务对象的起始地址然后再把起始地址类型转换为任务对象指针。 基于这个思想其实我们是可以在面向对象的语言中修改私有属性的如果这门语言支持指针这种直接操作内存的语法的话。 不过一个个算还是太麻烦了我们可以直接使用宏 //get father struct address //how to use it:struct parent *parent_ptr container_of(child_ptr, struct parent, child) #define container_of(ptr, type, member) \((type *)((char *)(ptr) - offsetof(type, member)))这样就可以直接通过链表找到任务对象起始地址了。 相对于初步的Sparrow RTOS链表版本的功能增加如下,增加了一个TimeSlice也就是时间片功能。 void xTaskCreate( TaskFunction_t pxTaskCode,const uint16_t usStackDepth,void * const pvParameters,uint32_t uxPriority,TaskHandle_t * const self,uint8_t TimeSlice)任务优先级设置 使用链表数组对应每个优先级因此我们可以通过设置链表数组的大小来更改支持的优先级范围。不过由于支持同优先级和时间片因此挂载的任务数量其实是不受限制的除非内存不够。 时间片 时间片是针对同优先级的说法当最高优先级有多个任务时每个任务会根据自身设置的时间片轮流享有CPU运行时间。 在时钟触发型RTOS中一个时间片就是两次systick时钟中断之间的响应间隔在Sparrow RTOS中默认为1ms。 例如 xTaskCreate( taskA,256,NULL,3,tcbTask1,1);xTaskCreate( taskB,256,NULL,3,tcbTask2,3); 对于taskA和taskB当最高优先级为3时这两个任务会轮流执行不过taskA只会执行1个时间片然后就会将CPU执行权交给taskBtaskB会执行三个时间片然后再将CPU执行权交给taskA如此反复循环如果最高优先级一直是3。 互斥锁设计 在Sparrow RTOS的数表版本中互斥锁的优先级反转功能是设置优先级为阻塞任务中最大的那个优先级1但是这样会导致浪费优先级对于可能发生阻塞的任务我们要确保这些任务的优先级必须设置合理不然会导致灾难的发生。 但是对于链表版本由于支持同优先级因此我们可以设置相同的优先级避免优先级反转现象的发生而不会占用额外的优先级。 原子操作 由于临界区屏蔽中断的较为粗暴所以对于简单的加减操作可以使用内核提供的原子操作例如 atomic_add(a,v),表示*v a atomic_inc(v),表示*v自加 考虑下面的情况 void taskA(){a; 任务切换发生另一个任务令a;b a;读取a但是a的值是错误的 }void taskB(){a;c a; a的值是错误的 } 我们使用A和B两个线程对a进行递增但是两个线程的递增可能是无效的例如 #mermaid-svg-GXBwjeAeIxkaOG7T {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GXBwjeAeIxkaOG7T .error-icon{fill:#552222;}#mermaid-svg-GXBwjeAeIxkaOG7T .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-GXBwjeAeIxkaOG7T .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-GXBwjeAeIxkaOG7T .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-GXBwjeAeIxkaOG7T .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-GXBwjeAeIxkaOG7T .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-GXBwjeAeIxkaOG7T .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-GXBwjeAeIxkaOG7T .marker{fill:#333333;stroke:#333333;}#mermaid-svg-GXBwjeAeIxkaOG7T .marker.cross{stroke:#333333;}#mermaid-svg-GXBwjeAeIxkaOG7T svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-GXBwjeAeIxkaOG7T .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-GXBwjeAeIxkaOG7T .cluster-label text{fill:#333;}#mermaid-svg-GXBwjeAeIxkaOG7T .cluster-label span{color:#333;}#mermaid-svg-GXBwjeAeIxkaOG7T .label text,#mermaid-svg-GXBwjeAeIxkaOG7T span{fill:#333;color:#333;}#mermaid-svg-GXBwjeAeIxkaOG7T .node rect,#mermaid-svg-GXBwjeAeIxkaOG7T .node circle,#mermaid-svg-GXBwjeAeIxkaOG7T .node ellipse,#mermaid-svg-GXBwjeAeIxkaOG7T .node polygon,#mermaid-svg-GXBwjeAeIxkaOG7T .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-GXBwjeAeIxkaOG7T .node .label{text-align:center;}#mermaid-svg-GXBwjeAeIxkaOG7T .node.clickable{cursor:pointer;}#mermaid-svg-GXBwjeAeIxkaOG7T .arrowheadPath{fill:#333333;}#mermaid-svg-GXBwjeAeIxkaOG7T .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-GXBwjeAeIxkaOG7T .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-GXBwjeAeIxkaOG7T .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-GXBwjeAeIxkaOG7T .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-GXBwjeAeIxkaOG7T .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-GXBwjeAeIxkaOG7T .cluster text{fill:#333;}#mermaid-svg-GXBwjeAeIxkaOG7T .cluster span{color:#333;}#mermaid-svg-GXBwjeAeIxkaOG7T div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-GXBwjeAeIxkaOG7T :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 线程1读取counter值等于0 线程1增加counter值 CPU0写入counter值等于1 线程2读取counter值等于0 线程2增加counter值 线程1写入counter值等于1 最终counter值等于1 原子操作具有return版本,例如 int a atomic_inc_return(a,v);其实原子操作不仅可以保证线程操作的原子性也可以在多CPU条件下保证数据操作的原子性。 总结 以上就是对Sparrow RTOS链表版本内核的总结整体来看链表版本支持更多任务数量和功能但是执行效率和简洁性不如数表版本不过二者适用情景不同根据实际情况选择即可。 笔者本人更喜欢数表版本只使用了几百行程序就实现了RTOS的基本功能简洁明了同时也是一个良好的学习素材。笔者追求的程序风格一直都是模块化、高效、简洁明了数表版本的内核是非常令笔者得意的毕竟几千几万行的操作系统内核浩如烟海几百行的可不多见。 对于学习Sparrow RTOS的读者来说笔者推荐数表版本的内核虽然代码量不多但彻底搞懂并能更改代码可不容易。 结语 Sparrow RTOS将会持续维护更新不断完善其实笔者也是有为它添加设备树、驱动框架和网络协议栈这些功能的想法不过这都是后话了也许哪天会更新也许一直没时间做这些这都是不确定的。不过它的初衷就是一个学习用途的RTOS而它也确实非常适合这一任务。 最后笔者真诚希望读者都能在Sparrow RTOS的教程中收获对操作系统的思考与领悟操作系统的学习之路道阻且长在海滩拾贝的过程中希望读者也能收获属于自己的快乐。 以上与君共勉。 项目地址skaiui2/SKRTOS_sparrow: Lightweight rtos inspired by SKRTOS
http://www.dnsts.com.cn/news/268524.html

相关文章:

  • 网站备案前置审批表免费域名网站黄的免费
  • 珠海建设集团网站首页网站设计理念介绍
  • 网站建设实训要求关键词大全
  • 的推网站模板百度公司排名
  • 医疗网站模板网匠网站建设有限公司
  • 教如何做帐哪个网站好网站模板怎么做视频教程
  • 成都哪里有做网站的公司phpcms学校网站模板
  • 移动端的网站电商怎么做流量
  • 做企业英语网站要注意哪些广元网页制作公司
  • 网站建设的背景音乐专业的网站建设公哪家专业
  • 家电网站制作如何做网站产品图片
  • 建设旅游网站目的苏州网站设计网站开发公司
  • 网站建设类公司可以拿哪些项目资金辽宁建设工程信息网诚信备案库
  • 别人做的网站打不开计算机专业是干什么的
  • 线上运营推广工作内容seo教程技术资源
  • 网站建设技术支持有什么百度一下你就知道 官网
  • seo网站关键词优化怎么做有哪些可以做网站的平台
  • 全屏网站帮助seo的外链平台有哪些
  • 网上花店网站建设wordpress访问密码保护文章
  • 手机网站 html5英语字体设计网站好
  • 厦门网站建设网络推广wordpress中文乱码
  • 知名电子商务网站如何快速收录一个网站的信息
  • ftp如何上传网站ipad wordpress 应用
  • 网站建设中的主要功能wordpress自定义管理员头像
  • 进入城乡建设网站怎么竣工备案wordpress缩略图和文章摘要
  • 做网站的代码难吗怎样做网站推广啊抖音
  • 地方行业网站东莞做网站(信科网络)
  • 建设个人网站赚钱网站维护的内容
  • 郑州网站建设公司招聘广州网页设计学校有哪些
  • 地方网站做相亲赢利点在哪店铺推广平台有哪些