软件著作权提交源代码有哪些格式要求

软件著作权提交源代码有哪些格式要求,第1张

一、申请文件的格式要求

1、所提交的纸介质申请文件和证明文件需复制在A4纸上;

2、提交的各类表格应当使用中国版权保护中心制定的统一表格(可以是原表格的复制件),填写内容应当使用钢笔或签字笔填写或者打印,字迹应当整齐清楚,不得涂改;

3、申请表格内容应当使用中文填写,并由申请者盖章(签名);

4、提交的各种证件和证明文件是外文的,应当附送中文译本;

5、所提交的申请文件应当为一份

二、各类申请的文件交存要求

1按照要求填写的计算机软件著作权申请表

2申请者身份z明(复印件)

(1)法人或其他组织身份z明——企业法人:营业执照副本;事业法人:事业法人代码证书;其他组织:当地民政机关或主管部门批文

台湾省法人应提供营业执照公证书(由当地法院或相关机构开具);香港和澳门特别行政区法人应提供营业执照复印件及公证认证书;外国公司应提供营业执照复印件及公证认证书(经中华人民共和国驻所在国大使馆认证)

(2)自然人身份z明——中国公民居民身份z复印件或其他证明复印件;外国个人需提交护照复印件或个人身份z明认证件(经中华人民共和国驻所在国大使馆认证)

3鉴别材料

(1)源程序按前、后各连续30页,共60页源程序每页不少于50行(结束页除外),右上角标注页号1-60;

(2)文档(如:用户手册、设计说明书、使用说明书等任选一种)按前、后各连续30页,共60页每页不少于30行(结束页除外),右上角标注页号1-60

4申请软件著作权登记,可以选择以下方式之一对鉴别材料作例外交存:

(1)源程序前、后各连续的30页,其中的机密部分用黑色宽斜线覆盖,但覆盖部分不得超过交存源程序的50%;

(2)源程序连续的前10页,加上源程序的任何部分的连续的50页;

(3)目标程序前、后各连续的30页,和源程序的任何部分连续的20页

文档作例外交存的,参照前款规定处理。

5申请人可申请将源程序、文档或者样品进行封存除申请人或者司法机关外,任何人不得启封

[注]已办理软件著作权登记的,其著作权发生继承、受让、承受时,当事人应当出具软件著作权登记证书(复印件),无须提交鉴别材料

6其他软件权属证明文件

(1)软件权属证明委托开发:——合作开发:合同书或协议书;软件委托开发协议或合同书;下达任务开发:下达任务开发软件任务书;利用他人软件开发的软件许可证明

(2)继承、受让、承受软件著作权的申请人,提交以下证明文件

①“继承”专指原著作权人(自然人)发生死亡,而由合法的继承人(自然人)依法继承软件著作权的情况。继承人申请软件著作权登记时,提交合法的继承证明(经公证的遗嘱或者法院的判决等);

②“受让”指通过自然人之间、自然人与法人或者其他组织之间、法人之间、法人或者其他组织之间转让后,取得软件著作权的情况。受让人申请软件著作权登记的,提交依法签订的著作权转让合同或者相关证明

③“承受”指法人或其他组织发生变更(如:改制)、终止(如:合并),而由其他法人或者其他组织享有软件著作权的情况当法人或者其他组织以权利承受人申请登记的,提交的著作权承受证明:

著作权承受证明——法人或者其他组织的工商变更证明;国有法人或者其他组织的上级主管机构的行政批复

7、版本说明

申请登记软件V10以上的高版本或以其他符号作为版本号进行原创软件登记时,应提交版本说明

在前文中,我们分析了内核中进程和线程的统一结构体task_struct,并分析进程、线程的创建和派生的过程。在本文中,我们会对任务间调度进行详细剖析,了解其原理和整个执行过程。由此,进程、线程部分的大体框架就算是介绍完了。本节主要分为三个部分:Linux内核中常见的调度策略,调度的基本结构体以及调度发生的整个流程。下面将详细展开说明。

Linux 作为一个多任务 *** 作系统,将每个 CPU 的时间划分为很短的时间片,再通过调度器轮流分配给各个任务使用,因此造成多任务同时运行的错觉。为了维护 CPU 时间,Linux 通过事先定义的节拍率(内核中表示为 HZ),触发时间中断,并使用全局变量 Jiffies 记录了开机以来的节拍数。每发生一次时间中断,Jiffies 的值就加 1。节拍率 HZ 是内核的可配选项,可以设置为 100、250、1000 等。不同的系统可能设置不同的数值,可以通过查询 /boot/config 内核选项来查看它的配置值。

Linux的调度策略主要分为实时任务和普通任务。实时任务需求尽快返回结果,而普通任务则没有较高的要求。在前文中我们提到了task_struct中调度策略相应的变量为policy,调度优先级有prio, static_prio, normal_prio, rt_priority几个。优先级其实就是一个数值,对于实时进程来说,优先级的范围是 0 99;对于普通进程,优先级的范围是 100 139。数值越小,优先级越高。

实时调度策略主要包括以下几种

普通调度策略主要包括以下几种:

首先,我们需要一个结构体去执行调度策略,即sched_class。该类有几种实现方式

普通任务调度实体源码如下,这里面包含了 vruntime 和权重 load_weight,以及对于运行时间的统计。

在调度时,多个任务调度实体会首先区分是实时任务还是普通任务,然后通过以时间为顺序的红黑树结构组合起来,vruntime 最小的在树的左侧,vruntime最多的在树的右侧。以CFS策略为例,则会选择红黑树最左边的叶子节点作为下一个将获得 CPU 的任务。而这颗红黑树,我们称之为运行时队列(run queue),即struct rq。

其中包含结构体cfs_rq,其定义如下,主要是CFS调度相关的结构体,主要有权值相关变量、vruntime相关变量以及红黑树指针,其中结构体rb_root_cached即为红黑树的节点

对结构体dl_rq有类似的定义,运行队列由红黑树结构体构成,并按照deadline策略进行管理

对于实施队列相应的rt_rq则有所不同,并没有用红黑树实现。

下面再看看调度类sched_class,该类以函数指针的形式定义了诸多队列 *** 作,如

调度类分为下面几种:

队列 *** 作中函数指针指向不同策略队列的实际执行函数函数,在linux/kernel/sched/目录下,fairc、idlec、rtc等文件对不同类型的策略实现了不同的函数,如fairc中定义了

以选择下一个任务为例,CFS对应的是pick_next_task_fair,而rt_rq对应的则是pick_next_task_rt,等等。

由此,我们来总结一下:

有了上述的基本策略和基本调度结构体,我们可以形成大致的骨架,下面就是需要核心的调度流程将其拼凑成一个整体,实现调度系统。调度分为两种,主动调度和抢占式调度。

说到调用,逃不过核心函数schedule()。其中sched_submit_work()函数完成当前任务的收尾工作,以避免出现如死锁或者IO中断等情况。之后首先禁止抢占式调度的发生,然后调用__schedule()函数完成调度,之后重新打开抢占式调度,如果需要重新调度则会一直重复该过程,否则结束函数。

而__schedule()函数则是实际的核心调度函数,该函数主要 *** 作包括选取下一进程和进行上下文切换,而上下文切换又包括用户态空间切换和内核态的切换。具体的解释可以参照英文源码注释以及中文对各个步骤的注释。

其中核心函数是获取下一个任务的pick_next_task()以及上下文切换的context_switch(),下面详细展开剖析。首先看看pick_next_task(),该函数会根据调度策略分类,调用该类对应的调度函数选择下一个任务实体。根据前文分析我们知道,最终是在不同的红黑树上选择最左节点作为下一个任务实体并返回。

下面来看看上下文切换。上下文切换主要干两件事情,一是切换任务空间,也即虚拟内存;二是切换寄存器和 CPU 上下文。关于任务空间的切换放在内存部分的文章中详细介绍,这里先按下不表,通过任务空间切换实际完成了用户态的上下文切换工作。下面我们重点看一下内核态切换,即寄存器和CPU上下文的切换。

switch_to()就是寄存器和栈的切换,它调用到了 __switch_to_asm。这是一段汇编代码,主要用于栈的切换, 其中32位使用esp作为栈顶指针,64位使用rsp,其他部分代码一致。通过该段汇编代码我们完成了栈顶指针的切换,并调用__switch_to完成最终TSS的切换。注意switch_to中其实是有三个变量,分别是prev, next, last,而实际在使用时,我们会对last也赋值为prev。这里的设计意图需要结合一个例子来说明。假设有ABC三个任务,从A调度到B,B到C,最后C回到A,我们假设仅保存prev和next,则流程如下

最终调用__switch_to()函数。该函数中涉及到一个结构体TSS(Task State Segment),该结构体存放了所有的寄存器。另外还有一个特殊的寄存器TR(Task Register)会指向TSS,我们通过更改TR的值,会触发硬件保存CPU所有寄存器在当前TSS,并从新的TSS读取寄存器的值加载入CPU,从而完成一次硬中断带来的上下文切换工作。系统初始化的时候,会调用 cpu_init()给每一个 CPU 关联一个 TSS,然后将 TR 指向这个 TSS,然后在 *** 作系统的运行过程中,TR 就不切换了,永远指向这个 TSS。当修改TR的值得时候,则为任务调度。

更多Linux内核视频教程文本资料免费领取后台私信 内核大礼包 自行获取。

在完成了switch_to()的内核态切换后,还有一个重要的函数finish_task_switch()负责善后清理工作。在前面介绍switch_to三个参数的时候我们已经说明了使用last的重要性。而这里为何让prev和last均赋值为prev,是因为prev在后面没有需要用到,所以节省了一个指针空间来存储last。

至此,我们完成了内核态的切换工作,也完成了整个主动调度的过程。

抢占式调度通常发生在两种情况下。一种是某任务执行时间过长,另一种是当某任务被唤醒的时候。首先看看任务执行时间过长的情况。

该情况需要衡量一个任务的执行时间长短,执行时间过长则发起抢占。在计算机里面有一个时钟,会过一段时间触发一次时钟中断,通知 *** 作系统时间又过去一个时钟周期,通过这种方式可以查看是否是需要抢占的时间点。

时钟中断处理函数会调用scheduler_tick()。该函数首先取出当前CPU,并由此获取对应的运行队列rq和当前任务curr。接着调用该任务的调度类sched_class对应的task_tick()函数进行时间事件处理。

以普通任务队列为例,对应的调度类为fair_sched_class,对应的时钟处理函数为task_tick_fair(),该函数会获取当前的调度实体和运行队列,并调用entity_tick()函数更新时间。

在entity_tick()中,首先会调用update_curr()更新当前任务的vruntime,然后调用check_preempt_tick()检测现在是否可以发起抢占。

check_preempt_tick() 先是调用 sched_slice() 函数计算出一个调度周期中该任务运行的实际时间 ideal_runtime。sum_exec_runtime 指任务总共执行的实际时间,prev_sum_exec_runtime 指上次该进程被调度时已经占用的实际时间,所以 sum_exec_runtime - prev_sum_exec_runtime 就是这次调度占用实际时间。如果这个时间大于 ideal_runtime,则应该被抢占了。除了这个条件之外,还会通过 __pick_first_entity 取出红黑树中最小的进程。如果当前进程的 vruntime 大于红黑树中最小的进程的 vruntime,且差值大于 ideal_runtime,也应该被抢占了。

如果确认需要被抢占,则会调用resched_curr()函数,该函数会调用set_tsk_need_resched()标记该任务为_TIF_NEED_RESCHED,即该任务应该被抢占。

某些任务会因为中断而唤醒,如当 I/O 到来的时候,I/O进程往往会被唤醒。在这种时候,如果被唤醒的任务优先级高于 CPU 上的当前任务,就会触发抢占。try_to_wake_up() 调用 ttwu_queue() 将这个唤醒的任务添加到队列当中。ttwu_queue() 再调用 ttwu_do_activate() 激活这个任务。ttwu_do_activate() 调用 ttwu_do_wakeup()。这里面调用了 check_preempt_curr() 检查是否应该发生抢占。如果应该发生抢占,也不是直接踢走当前进程,而是将当前进程标记为应该被抢占。

由前面的分析,我们知道了不论是是当前任务执行时间过长还是新任务唤醒,我们均会对现在的任务标记位_TIF_NEED_RESCUED,下面分析实际抢占的发生。真正的抢占还需要一个特定的时机让正在运行中的进程有机会调用一下 __schedule()函数,发起真正的调度。

实际上会调用__schedule()函数共有以下几个时机

从系统调用返回用户态:以64位为例,系统调用的链路为do_syscall_64->syscall_return_slowpath->prepare_exit_to_usermode->exit_to_usermode_loop。在exit_to_usermode_loop中,会检测是否为_TIF_NEED_RESCHED,如果是则调用__schedule()

内核态启动:内核态的执行中,被抢占的时机一般发生在 preempt_enable() 中。在内核态的执行中,有的 *** 作是不能被中断的,所以在进行这些 *** 作之前,总是先调用 preempt_disable() 关闭抢占,当再次打开的时候,就是一次内核态代码被抢占的机会。preempt_enable() 会调用 preempt_count_dec_and_test(),判断 preempt_count 和 TIF_NEED_RESCHED 是否可以被抢占。如果可以,就调用 preempt_schedule->preempt_schedule_common->__schedule 进行调度。

   本文分析了任务调度的策略、结构体以及整个调度流程,其中关于内存上下文切换的部分尚未详细叙述,留待内存部分展开剖析。

1、调度相关结构体及函数实现

2、schedule核心函数

1、首先需要下载一个APP的开发工具,这里使用的是开发安卓的ADT-bundle工具。

2、打开这个开发工具,然后创建一个项目。

3、然后输入项目的APP名称,项目名称,包名,点击下一步。

4、然后这一步是选择SDK的版本,默认既可以了,直接点击下一步。

5、然后这一步是选择APP的图标,选择完成之后点击下一步。

6、然后这一步是选择界面的模版,这里选择空白模版“Blank Activity”既可以了,点击下一步。

7、然后这一步是输入主界面的名字,默认就可以了,点击完成。

8、然后项目就创建完成了,项目的结构如下。

C程序的基本结构 = 主函数+m自定义函数+n文件包含,(其中m、n均大于等于0)。

从公式可以看出一个C程序必须有且仅有一个主函数,因为主函数是C程序的入口点和结束点。而自定义函数和文件包含可以没有。

结构可以看成是特殊的数组。结构名等同数组名。结构变量等同 数组名,这样理解起来比较易懂。

数组含一组数,它们是同一类型的。整型数组,它的所有元素都是整型。float 数组,它的所有元素都是float型。结构含一组数,它们往往是不同类型的。 它的成员有整型,有float型,有 char 型。有没有结构变量,就同有没有数组变量一样。

扩展资料

用goto语句和if语句构成循环1到100求和的源代码如下

main()

{

int i,sum=0;

i=1;

loop: if (i<=100)

{

sum=sum+i;

i++;

goto loop;

}

printf("%d\n",sum);

}

import androidappActivity;

import androidosBundle;

import androidviewMotionEvent;

import androidviewView;

import androidviewViewOnTouchListener;

import androidwidgetLinearLayout;

public class MoveballActivity extends Activity {

/ Called when the activity is first created /

@Override

public void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

setContentView(Rlayoutmain);

LinearLayout root = (LinearLayout)findViewById(Ridroot);

final DrawView draw = new DrawView(this);

drawsetMinimumWidth(300);

drawsetMinimumHeight(500);

drawsetOnTouchListener(new OnTouchListener(){

public boolean onTouch(View arg0, MotionEvent event){

drawcurrentX = eventgetX();

drawcurrentY = eventgetY();

drawinvalidate();

return true ;

}

});

rootaddView(draw);

}

}

import androidcontentContext;

import androidgraphicsCanvas;

import androidgraphicsColor;

import androidgraphicsPaint;

import androidviewView;

public class DrawView extends View{

public float currentX = 40 ;

public float currentY = 50 ;

public DrawView (Context context){

super(context);

}

public void onDraw(Canvas canvas){

superonDraw(canvas);

//创建画笔

Paint p = new Paint();

//设置画笔的颜色

psetColor(ColorRED);

//绘制一个小圆(作为小球)

canvasdrawCircle(currentX, currentY, 15, p);

}

}

跟随手指移动的小球,参考一下吧。

目录

2 开发环境 1

3 开发工具 1

4 完成时间 1

5 设计思想 1

51 游戏的组成 1

52 游戏设计要点 1

53游戏的主内容分析 2

54初始排列方式的分析 2

55游戏核心元素的分析 2

56游戏 *** 作的分析 3

57游戏胜负判断的分析 3

6 设计过程及设计步骤 3

61 游戏总体设计 3

62 主场景 4

621 设置游戏主场景配置 4

622 设置背景 6

623 创建开始按钮 7

624 开始按钮跳跃特效实现 10

625 创建选择关卡场景 11

626 点击开始按钮进入选择关卡场景 12

63 选择关卡场景 13

631 场景基本设置 13

632 背景设置 14

633 返回按钮 16

634 创建选择关卡按钮 16

635 创建翻金币场景 17

64 翻金币场景 19

641 场景基本设置 19

642 背景设置 19

643 返回按钮 20

644 显示当前关卡 21

645 创建金币背景 22

646 创建金币类 23

65 引入关卡数据 26

651 添加现有文件dataConfig 26

652 添加现有文件 27

653 完成添加 27

654 数据分析 28

655 测试关卡数据 28

67 初始化各个关卡 29

68 翻金币特效 31

681 MyCoin类扩展属性和行为 31

682 创建特效 32

683 禁用按钮 34

69 翻周围金币 36

610 判断是否胜利 37

611 胜利显示 38

612 胜利后禁用按钮 39

613 音效添加 39

6131 开始音效 39

6132 选择关卡音效 40

6133 返回按钮音效 40

614 优化项目 41

615 打包项目 42

6151 绿色版本 42

6152 标准版本 42

7 测试运行 43

71 主场景 43

72 选择关卡场景 43

73 翻金币场景 44

74 游戏胜利场景 45

8 评价与修订 46

9设计体会 48

参 考 文 献 49

附  录 50

致  谢 54

1 设计题目

基于QT实现的翻金币游戏

2 开发环境

硬件环境:微机系列,内存在1G以上

软件环境:Microsoft Windows 10家庭版

3 开发工具

Qt Creator 411、HM NIS、NSIS(客户端打包程序)

4 完成时间

202061----2020612

5 设计思想

51 游戏的组成

我认为游戏的组成主要是两个部分:游戏资源和游戏机制。

游戏资源泛指游戏中给用户提供的视听资源,比如游戏的场景,各种道具和角色的外观,游戏音乐,与用户进行交互的界面等。

游戏机制泛指游戏中实现游戏运作的方式,在翻金币小游戏中,怎么排列金币,如何翻转金币,如何判断游戏的胜利与失败,这种对于用户来讲相对隐式的存在却在游戏开发中占据核心地位。游戏机制的实现通常需要数据结构与相关算法的结合。

52 游戏设计要点

再设计游戏时,因为此项目窗口较多,因此在对于各个窗口的选择上是一个比较需要注意的地方。在初始化各种窗口的时候,是选择QMainWindow,Qwidget,还是QDialog类型呢?这个主要看该窗口的功能,如果作为主窗口(比如交互窗口,游戏窗口)存在的话,选择QMainWindow类型最合适,因为QMainWindow可以搭载工具栏和状态栏,这些功能选择组件在小游戏里面是很实用的(尤其是工具栏)。

至于QDialog则用于对话窗口,单方向地由软件向用户发送信息,一般不做交互,游戏的游戏说明,提示,警告都适合使用QDialog类型。

QWidget适合用来自定义组件,这次的项目中没有组合类的自定义组件,因此没有使用。该项目中自定义的是单个类型的组件(新的按钮),所以直接去继承QT里面的button类就可以了。

以上就是关于软件著作权提交源代码有哪些格式要求全部的内容,包括:软件著作权提交源代码有哪些格式要求、一文读懂Linux任务间调度原理和整个执行过程、有一个APP的源代码,怎么运营等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9870003.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存