北邮操作系统进程管理实验报告

北邮操作系统进程管理实验报告
北邮操作系统进程管理实验报告

操作系统实验课程报告

课题: 进程管理实验

姓名张涛

学院计算机学院

班级2011211311

学号2011211419

2013年11月10日

1.实验目的:

(1)加深对进程概念的理解,明确进程和程序的区别;

(2)进一步认识并发执行的实质;

(3)分析进程争用资源的现象,学习解决进程互斥的方法;

(4)了解Linux系统中进程通信的基本原理。

2.实验预备内容

(1)阅读Linux的sched.h源码文件,加深对进程管理概念的理解。

这个文件长达2616行,这里截取第1221~1548行抄录在实验报告最后,即结构体task_struct,地位相当于PCB。

下面对几个比较重要的参数,结合本人的了解以及网上查阅的资料做一点解释。

中括号内的数字为代码行号,下同。

volatile long state:【1222】进程状态字,表示进程当前的状态(运行、就绪、等待、僵死、暂停、交换),分别对应已定义好的常量;

TASK_RUNING:正在运行或可运行状态;

TASK_INTERRUPTIBLE:可打断睡眠状态;

TASK_UNINTERRUPTIBLE:不可打断睡眠状态;

TASK_ZOMBLE:僵死状态;

TASK_STOPPED:暂停状态;

交换状态。

void *stack:【1223】进程所使用的栈空间;

unsigned int flags:【1225】进程标志(创建、关闭、跟踪、被跟踪、内核dump等),同样对应已定义好的常量;

unsigned int rt_priority:【1237】表示本进程的实时优先级;

const struct sched_class *sched_class、struct sched_entity se:【1239,1240】分别是调度类和调度实体,这两个结构包含了用于任务调度的完整的信息(进程信息、调度策略等);

unsigned int policy:【1260】进程的调度策略标志,有三种调度标志:

SCHED_OTHER :普通进程的调度策略,基于优先权的轮转法;

SCHED_FIFO:实时进程的调度策略,基于先进先出的算法;

SCHED_RR:实时进程的调度策略,基于优先权的轮询法。

struct list_head tasks:【1274】任务队列,为一双向循环链表;

int pdeath_signal:【1282】父进程终止时产生的信号;

pid_t pid:【1294】进程标识符,操作系统每创建一个新的进程就要为这个新进程分配一个进程控制块(PCB),系统内核通过pid区分这些进程的;

struct task_struct *real_parent:【1307】本进程的父进程的PCB;

struct list_head children:【1312】本进程的子进程列表;

struct list_head ptraced:【1321】本进程正在使用ptrace监视的进程列表;

struct thread_struct thread:【1375】本进程下属的线程集;

struct signal_struct *signal、struct sighand_struct *sighand:【1383,1384】分别是进程运行时产生的信号以及信号处理模块。

(2)阅读Linux的fork()源码文件,分析进程的创建过程。

do_fork()函数应该与fork()函数一样的,这个文件长达1287行,这里截取第835~1265 行(主要包括copy_process()函数与do_fork()函数)抄录在实验报告最后,并通过这两个函数简单分析一下进程的创建。

copy_process()函数的作用是克隆当前进程(包括下述所有需要被复制的信息),但是不负责运行。

首先,在内存中分配一个新的task_struct数据结构【852】,并将当前的task_struct复制给它,以代表新产生的进程的PCB【877】,用户进程数加1【889,890】。然后进行对新进程的定义,包括将新进程定义为未执行【907】,将进程标志和PID复制给新进程【908,909】,初始化本进程的子进程链表【917】,以及初始化CPU计数、读/写字节计数和读/写系统调用计数【926-932】,复制文件系统信息、信号及信号处理机制、内存、线程集及命名空间等等【961-982】。最后,设置对新进程的调度策略【1017】,完成与CPU使用以及与父进程之间关系相关的设定【1031-1050】等等。最后是返回新进程及错误处理部分【1120-1161】。

其实我们可以发现,copy_process()函数做了许多的事,接下来的do_fork()函数反而显得相对简单。首先将copy_process()能做的工作全部做完【1224】,然后根据情况决定新进程的唤醒/暂停【1245-1248】,最后,向父进程返回子进程的PID【1264】,一个新进程就产生了。

总之,进程的创建可以大致总结为以下三个过程:第一,建立新的进程控制结构并初始化PCB;第二,对相关的内核数据结构进行复制或赋值,使之成为进程映象;第三,设置调度策略并启动调度程序,给予新进程运行的机会。

3.实验环境

此实验采用的是Win8下虚拟机VMware-workstation 10 软件中的ubuntu-10.10-desktop-i386版本。

/******************************************************************************

该虚拟机为ubuntu,获得win8中512MB内存,15G存储空间。

ubuntu用户操作名名tao。

******************************************************************************/ 4.实验步骤

4.1.1题目要求:

编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”,子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。

4.1.2程序设计说明:

利用fok()创建子进程

4.1.3源代码:

4.1.4运行结果:

4.1.5分析:

从截图可见运行结果有abc, bac, acb等。

这是因为三个进程间没有同步措施,所以父进程和两个子进程的输出次序带有随机性。因此实际上三者的各种组合都可能出现。

当pid>0表示为父进程,=0子进程,<0创建失败,由此可以根据返回值来确定不同操作。/******************************************************************************

程序一

4.1.6题目要求:

修改已经编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。

4.1.7程序设计说明:

直接改自第一个程序。

其间加sleep() 是为了规范下格式。

详见源代码。

4.1.8源代码:

4.1.9运行结果:

4.2.0分析:

可见运行情况和第一个程序是很像的。

由于父进程sleep(4)的存在,所以每次都是先打印完子进程的内容后再输出父进程内容。

/****************************************************************************** 程序2:

4.2.1题目要求:

如果在程序中使用系统调用lockf()来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。

4.2.2程序设计说明:

此题主要是使用,lockf()函数,并用输出结果进行对比,从而可以观察到lockf()函数实际的用处。但是此题若只输出一句话,则无法观察到分次执行的效果,但若每个进程输出两句话

则可出现执行混乱的现象。

查阅资料:lockf()函数允许将文件区域用作信号量(监视锁),或用于控制对锁定进程的访问(强制模式记录锁定)。试图访问已锁定资源的其他进程将返回错误或进入休眠状态,直到资源解除锁定为止。当关闭文件时,将释放进程的所有锁定,即使进程仍然有打开的文件。当进程终止时,将释放进程保留的所有锁定。

/***************************************************************************** Lockf(int fd, int cmd, off_t len)函数的使用方法:

①:参数fd是打开文件的文件描述符。

通过此函数调用建立锁定,文件描述符必须使用只写权限(O_WRONL Y)或读写权限(O_RDWR)打开。如果调用进程是具有PRIV_LOCKRDONL Y权限的组的成员,它也可以使用lockf()来锁定使用只读权限(O_RDONL Y)打开的文件。

②:cmd是指定要采取的操作的控制值,允许的值定义如下:

#define F_ULOCK 0 //解锁

#define F_LOCK 1 //互斥锁定区域

#define F_TLOCK 2 //测试互斥锁定区域

#define F_TEST 3 //测试区域

③:len:要锁定或解锁的连续字节数:

要锁定的资源从文件中当前偏移量开始,对于正len将向前扩展,对于负len向后扩展(直到但不包括当前偏移量的前面的字节数)。如果len=0,则锁定从当前偏移量到文件结尾的区域(即从当前偏移量到现有或任何将来的文件结束标志)。

******************************************************************************/ 4.2.3源代码:

4.2.4运行结果:

若是去掉lockf(),则运行结果如下

4.2.5分析:

由结果分析易得:

加了lockf后,尽管两个子进程的先后顺序仍然无法确认,但是可以肯定的是加上lock 后,每次执行lock间锁定的内容时,程序中是无法产生中断的,所以,lock具有对输出流的锁定作用。

/****************************************************************************** 4.3进程的软中断通信

程序3:

4.3.1题目要求:

(a)使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按Del/CTRL+C键).当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:

Child Process 1 is killed by Parent!

Child Process 2 is killed by Parent!

父进程等待两个子进程终止后,输出如下的信息后终止:

Parent Process is killed!

4.3.2程序设计说明:

1)题目解析和问题解决

一,要求Del后引发父进程的动作。实际就是触发软中断SIGINT。

二,要求在中断到来前两子进程处于等待状态,中断到来后立刻动作。对此,我自定义了两个函数my_wait()函数和my_stop()函数,通过对flag标志位的操作来实现。flag为真时等待,中断到来后通过my_stop()函数使flag改为假,从而退出等待的死循环。

虽然这样效率很低,但是在这个小程序里还是可以的。

三,至于如何控制父进程杀死子进程后再自杀,我用了signal()函数预留给用户自定义的10和12号信号,即SIGUSR1和SIGUSR2。让两个子进程分别监听这两个信号,父进程被触发后分别向两个子进程发出这两个信号杀死他们,然后再退出即可。

2)知识点

补充学习到的函数的定义。

/************************************************************************** 1、Signal(int signnum, sig_t handler)函数的使用方法:

参数说明:

第一个参数signum指明了所要处理的信号类型,它可以取除了SIGKILL和SIGSTOP 外的任何一种信号。

第二个参数handler描述了与信号关联的动作。

返回值:返回先前的信号处理函数指针,如果有错误则返回SIG_ERR(-1)。

2、kill(pid_t pid, int sig)函数的使用方法:

参数说明:

pid:可能选择有以下四种

1. pid大于零时,pid是信号欲送往的进程的标识。

2. pid等于零时,信号将送往所有与调用kill()的那个进程属同一个使用组的进程。

3. pid等于-1时,信号将送往所有调用进程有权给其发送信号的进程,除了进程1(init)。

4. pid小于-1时,信号将送往以-pid为组标识的进程。

sig:准备发送的信号代码,假如其值为零则没有任何信号送出,但是系统会执行错误检查,通常会利用sig值为零来检验某个进程是否仍在执行。

返回值说明:成功执行时,返回0。失败返回-1。

3、signal(SIGINT, SIG_IGN)和signal(SIGQUIT, SIG_IGN)的区别:

SIGINT是信号名称,你可以将之替换为其他的你想要的任何信号,SIG_IGN是函数指针。

这条代码的意思是如果发生SIGINT信号则中断,转去执行SIG_IGN函数。

同理:signal(SIGQUIT, SIG_IGN)

**************************************************************************/ 3)父子父同步的实现

在进程同步中,使用exit()和wait()实现了父进程等子进程终止的同步,但是这种同步方法不能实现子进程对父进程的等待。要实现子进程对父进程的等待可以使用父进程向子进程发软中断信号,子进程接收信号的方式实现。

这两种同步方式相结合,可以实现父→子→父的同步序列。

实现父→子→父同步的步骤如下:

⑴子进程使用signal()预置软中断处理函数,然后等待父进程发软中断信号;

⑵父进程中使用kill()发软中断信号给子进程,再用wait(0)等待子进程结束;

⑶子进程接收到软中断信号后转去执行中断处理函数

⑷子进程在中断处理返回后,使用exit(0)终止执行,向父进程发终止信息。

⑸父进程使用wait(0)接收到子进程的终止信息后结束等待,并终止自己的程序的执行。

4.3.3源代码:

4.3.4运行结果:

4.3.5分析:

如上图,可见两个子进程的执行顺序还是随机的。

/***************************************************************************** 程序3.2:

4.3.1题目要求:

(b)在上面的程序中增加语句signal(SIGINT,SIG_IGN)和signal(SIGQUIT,SIG_IGN),观察执行结果,并分析原因。

4.3.2程序设计说明:

signal(SIGTINT, SIG_IGN);//后台进程读中断信号,默认挂起

signal(SIGQUIT, SIG_IGN);//程序终止信号,默认操作写dump-core文件

4.3.3源代码:(略)

signal(SIGINT,SIG_IGN);

signal(SIGQUIT,SIG_IGN);

到两个子进程中

4.3.4运行结果及分析:

分析:

程序1:(使用kill()&signal())

此种情况下,当进程为父进程时,则需要用signal()捕捉,从键盘输入的ctrl+c

信号,而wait_del()函数的作用则是用来模拟进程进行,若没有此函数则由于运

行时间过短,进程可能还没捕捉到信号就已经退出进程了,从而达不到中断的效

果了。所以用了一个循环while(flag);模拟效果。然后再kill掉两个子进程,然

后用wait()函数等待子进程结束,在自杀。

若为子进程,则用signal()捕捉父进程发过来的自定义信号,同样用wait_del()

函数来模拟进程进行的效果。但由于子进程中没有对ctrl+c进行函数处理,所以

直接就结束掉了,而父进程由于有了signal(sigint,change_state);函数的存在,

则对ctrl+c函数进行处理,则父进程不会结束。

程序2:(使用)了函数signal(SIGINT, SIG-IGN)

这个函数的意思就是忽略了ctrl+c这个信号的作用。则将ctrl+c信号忽略掉,

所以若将这个语句加到两个子进程的语句段中,全部会打印出话。

(使用)了函数signal(SIGQUIT, SIG-IGN)

这个函数的作用就是当遇到QUIT即ctrl+\信号时,会忽略此信号,不做处理,

而实际处理ctrl+\后会出现以下结果:QUIT(core dumples);

/******************************************************************************

4.4进程的管道通信

程序4:

4.4.1题目要求:

编制一段程序,实现进程的管道通信。使用系统调用pipe()建立一条管道线,两个子进程P1和P2分别向管道各写一句话:

Child 1 is sending a message!

Child 2 is sending a message!

而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。要求父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。

4.4.2程序设计说明:

为了避免两个进程抢占管道,我把第二个子进程延时了,并且对管道加锁,从而形成独占,避免冲突产生。

而父进程只需用之前的wait()函数即可确保在两个子进程后执行。

查阅资料:

/****************************************************************************** 管道的创建:

#include

int pipe(int fd[2])

该函数创建的管道的两端处于一个进程中间,在实际应用中没有太大意义,因此,一个进程在由pipe()创建管道后,一般再fork一个子进程,然后通过管道实现父子进程间的通信(因此也不难推出,只要两个进程中存在亲缘关系,这里的亲缘关系指的是具有共同的祖先,都可以采用管道方式来进行通信)。

管道的读写规则:

管道两端可分别用描述字fd[0] 以及fd[1] 来描述,需要注意的是,管道的两端是固定了任务的。即一端只能用于读,由描述字fd[0] 表示,称其为管道读端;另一端则只能用于写,由描述字fd[1]来表示,称其为管道写端。如果试图从管道写端读取数据,或者向管道读端写入数据都将导致错误发生。一般文件的I/O函数都可以用于管道,如close、read、

write等等。

******************************************************************************/

4.4.3源代码:

4.4.4运行结果:

管道通信相对而言就没有什么难的了。系统调用pipe()把一个二元组初始化为管道,一头进一头出(这里是tube[1]进,tube[0]出)。子进程P1,P2都是往管道输入的,父进程会从管道读取信息。

sprintf(wb, "Child 1 is sending a message!\n");

write(tube[1], wb, 50);

两个子进程的上面截取的两句话,是向管道中输入字符串。

read(tube[0], rb, 50);

父进程从管道中读取字符串。

为了防止两个进程抢占管道,一方面把第二个子进程稍做延迟(sleep(1)),另一方面用前边用过的lockf()锁死管道,形成独占,避免冲突发生。

/****************************************************************************** 5思考

1)系统是怎么创建进程的?

答:新进程通过克隆老进程或是当前进程来创建。系统调用fork或clone可以创建新任务,复制发生在核心状态下地核心中。

在类UNIX系统中,除了根进程之外,如果想要在系统之中创建一个新的进程,唯一的方法就是利用一个已存在的进程通过系统调用fork()函数来实现,fork()函数被调用时,它会将调用它的进程复制出一个副本(一般会共享代码段,其它的数据段和堆栈等会复制个新的),原进程是复制得到进程的父进程,两个进程除了进程号不同,是一模一样,fork 调用结束后将 0 返回给子进程,将子进程的进程号返回给父进程,在调用fork函数之后,父子进程都将从位于fork函数的调用点之后的指令处开始执行,因为是两个不同的进程,它们的执行是并行的,先后次序是不定的。

(参考《Linux内核完全解析》和编程爱好者网站相关文章)

2)可执行文件加载时进行了哪些处理?

答:当操作系统装载一个可执行文件的时候,首先操作系统判断该文件是否是一个合法的可执行文件。如果是操作系统将按照段表中的指示为可执行程序分配地址空间。

加载文件最重要的是完成两件事:加载程序段和数据段到内存,以及进行外部定义符号的重定位。

下面是ELF文件为例的可执行文件加载处理:

1,内核读文件的头部,然后根据文件的数据指示分别读入各种数据结构,找到可加载的段加载到内存中。

2,内核分析出文件对应的动态连接器名称并加载动态连接器。

3,内核在新进程的堆栈中设置一些标记-值对,以指示动态连接器的相关操作。

4,内核把控制传递给动态连接器。

5,动态连接器检查程序对外部文件(共享库)的依赖性,并在需要时对其进行加载。

6,动态连接器对程序的外部引用进行重定位。

7,动态连接器进行程序运行的初始化。

8,动态连接器把控制传递给程序,从文件头部定义的程序进入点开始执行。

(参考execve()的内核代码和网上相关文章)

3)当首次调用新创建进程时,其入口在哪里?

答:当首次调用新创建进程时,入口是fork()之后的语句。

fork系统调用创建的子进程继承了原进程的context,也就是说fork调用成功后,子进程与父进程并发执行相同的代码。但由于子进程也继承了父进程的程序指针,所以子进程是从fork()后的语句开始执行(也就是新进程调用的入口)。另外fork在子进程和父进程中的返回值是不同的。在父进程中返回子进程的PID,而在子进程中返回0。所以可以在程序中检查PID的值,使父进程和子进程执行不同的分支。

(参考网上相关文章)

4)进程通信有什么特点?

答:(参考网上文章)

linux下进程间通信的几种主要手段简介:

管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;

信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数);

报文(Message)队列(消息队列):消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。

共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进

程间的同步及互斥。

信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。

套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V

的变种都支持套接字。

财务管理实训总结

财务管理实训总结 实训时间:xx年xx月xx日—xx年xx月xx日 实训地点:5411教室 实训科目:财务管理 实训内容:第一,财务管理的价值观点Excel练习;第二,证券 及其股价Excel练习;第三,财务分析Excel练习;第四,财务预测与 计划Excel练习;第五,企业筹资方式Excel练习;第六,资本成本和 资本结构Excel练习;第七,项目投资Excel练习。 实训感想:每到快要结束的时候,都会感叹时间过得真快! 经过一周的实训,收获了很多知识,让自己有“更上一层楼”的 感觉。这次的实训虽说告一段落了,但是财务管理的这次实训过程给 我留下深刻的印象,这也将是下一个起程。这次实训,虽然时间很短,但我觉得会对我以后的学习及工作产生很大的影响。这次的实训让我 们在平常学习的基础上,知识得到了进一步的巩固,更加清晰明白。 实训的第一天,拿到这个题都不知从何处下手,慢慢的,经过和同班 同学的交流讨论,开始着手了,也逐步地加快了进度。第一天结束了,第一部分的内容也做完了,有了很大的成就感,懂得了方法,也获得 了很多的知识。 第二天开始做时,也就越来越上手了,正所谓“天下难事始于易,天下大事始于细”。这次的实训让我们把书本上的知识使用电脑中的 办公软件Excel来完成,其实,这对于我们学财务管理的学生来说, 为我们提供了一个很好的实训机会,让我们对Excel有了进一步的了解,Excel中很多的功能也更加熟悉,比如:终值、现值、利率、年金、净现值等的计算,这些平常我们都没有怎么使用的函数,这次在实训 中将其使用熟悉。这次财务管理的实训,我们做了七个部分的内容, 从开始不知从何下手,到最后的得来应手,“万事开头难”,只要有

windows进程管理实验报告

实验报告 课程名称:操作系统 实验项目:windows进程管理 姓名: 专业:计算机科学与技术 班级: 学号:

计算机科学与技术学院 计算机系 2019 年 4 月 23 日

实验项目名称: windows进程管理 一、实验目的 1. 学习windows系统提供的线程创建、线程撤销、线程同步等系统调用; 2. 利用C++实现线程创建、线程撤销、线程同步程序; 3. 完成思考、设计与练习。 二、实验用设备仪器及材料 1. Windows 7或10, VS2010及以上版本。 三、实验内容 1 线程创建与撤销 写一个windows控制台程序(需要MFC),创建子线程,显示Hello, This is a Thread. 然后撤销该线程。 相关系统调用: 线程创建: CreateThread() 线程撤销: ExitThread() 线程终止: ExitThread(0) 线程挂起: Sleep() 关闭句柄: CloseHandle() 参考代码: ; } 运行结果如图所示。 完成以下设计题目: 1. 向线程对应的函数传递参数,如字符串“hello world!”,在线程中显示。 2. 如何创建3个线程A, B, C,并建立先后序执行关系A→B→C。

实验内容2 线程同步 完成父线程和子线程的同步。父线程创建子线程后进入阻塞状态,子线程运行完毕后再唤醒。 相关系统调用: 等待对象 WaitForSingleObject(), WaitForMultipleObjects(); 信号量对象 CreateSemaphore(), OpenSemaphore(), ReleaseSemaphore(); HANDLE WINAPI CreateSemaphore( _In_opt_ LPSECURITY_ATTRIBUTES lpSemaphoreAttributes _In_ LONG lInitialCount, _In_ LONG lMaximumCount, _In_opt_ LPCTSTR lpName ); 第一个参数:安全属性,如果为NULL则是默认安全属性 第二个参数:信号量的初始值,要>=0且<=第三个参数 第三个参数:信号量的最大值 第四个参数:信号量的名称 返回值:指向信号量的句柄,如果创建的信号量和已有的信号量重名,那么返回已经存在的信号量句柄参考代码: n"); rc=ReleaseSemaphore(hHandle1,1,NULL); err=GetLastError(); printf("Release Semaphore err=%d\n",err); if(rc==0) printf("Semaphore Release Fail.\n"); else printf("Semaphore Release Success. rc=%d\n",rc); } 编译运行,结果如图所示。

进程管理实验报告

实验2过程管理实验报告学生号姓名班级电气工程系过程、过程控制块等基本原理过程的含义:过程是程序运行过程中对数据集的处理,以及由独立单元对系统资源的分配和调度。在不同的数据集上运行程序,甚至在同一数据集上运行多个程序,是一个不同的过程。(2)程序状态:一般来说,一个程序必须有三种基本状态:就绪、执行和阻塞。然而,在许多系统中,过程的状态变化可以更好地描述,并且增加了两种状态:新状态和终端状态。1)就绪状态,当一个进程被分配了除处理器(CPU)以外的所有必要资源时,只要获得了处理器,进程就可以立即执行。此时,进程状态称为就绪状态。在系统中,多个进程可以同时处于就绪状态。通常,这些就绪进程被安排在一个或多个队列中,这些队列称为就绪队列。2)一旦处于就绪状态的进程得到处理器,它就可以运行了。进程的状态称为执行状态。在单处理器系统中,只有一个进程在执行。在多处理器系统中,可能有多个进程在执行中。3)阻塞状态由于某些事件(如请求输入和输出、额外空间等),执行进程被挂起。这称为阻塞状态,也称为等待状态。通常,处于阻塞状态的进程被调度为-?这个队列称为阻塞队列。4)新状态当一个新进程刚刚建立并且还没有放入就绪队列中时,它被称为新状态。5)终止状态是

什么时候-?进程已正常或异常终止,操作系统已将其从系统队列中删除,但尚未取消。这就是所谓的终结状态。(3)过程控制块是过程实体的重要组成部分,是操作系统中最重要的记录数据。控制块PCB记录操作系统描述过程和控制过程操作所需的所有信息。通过PCB,一个不能独立运行的程序可以成为一个可以独立运行的基本单元,并且可以同时执行一个进程。换句话说,在进程的整个生命周期中,操作系统通过进程PCB管理和控制并发进程。过程控制块是系统用于过程控制的数据结构。系统根据进程的PCB来检测进程是否存在。因此,进程控制块是进程存在的唯一标志。当系统创建一个进程时,它需要为它创建一个PCB;当进程结束时,系统回收其PCB,进程结束。过程控制块的内容过程控制块主要包括以下四个方面的信息。过程标识信息过程标识用于对过程进行标识,通常有外部标识和内部标识。外部标识符由流程的创建者命名。通常是一串字母和数字。当用户访问进程时使用。外部标识符很容易记住。内部标识符是为了方便系统而设置的。操作系统为每个进程分配一个唯一的整数作为内部标识符。通常是进程的序列号。描述性信息(process scheduling message)描述性信息是与流程调度相关的一些有关流程状态的信息,包括以下几个方面。流程状态:表

北邮通电实验报告

实验3 集成乘法器幅度调制电路 信息与通信工程学院 2016211112班 苏晓玥杨宇宁 2016210349 2016210350

一.实验目的 1.通过实验了解振幅调制的工作原理。 2.掌握用MC1496来实现AM和DSB的方法,并研究已调波与调制信号,载波之间的关系。3.掌握用示波器测量调幅系数的方法。 二.实验准备 1.本实验时应具备的知识点 (1)幅度调制 (2)用模拟乘法器实现幅度调制 (3)MC1496四象限模拟相乘器 2.本实验时所用到的仪器 (1)③号实验板《调幅与功率放大器电路》 (2)示波器 (3)万用表 (4)直流稳压电源 (5)高频信号源 三.实验内容 1.模拟相乘调幅器的输入失调电压调节。 2.用示波器观察正常调幅波(AM)波形,并测量其调幅系数。 3.用示波器观察平衡调幅波(抑制载波的双边带波形DSB)波形。 四.实验波形记录、说明 1.DSB信号波形观察

2.DSB信号反相点观察 3.DSB信号波形与载波波形的相位比较 结论:在调制信号正半周期间,两者同相;负半周期间,两者反相。

4.AM正常波形观测 5.过调制时的AM波形观察(1)调制度为100%

(2)调制度大于100% (3)调制度为30% A=260.0mv B=140.0mv

五.实验结论 我们通过实验了解振幅调制的工作原理是:调幅调制就是用低频调制信号去控制高频振荡(载波)的幅度,使其成为带有低频信息的调幅波。目前由于集成电路的发展,集成模拟相乘器得到广泛的应用,为此本实验采用价格较低廉的MC1496集成模拟相乘器来实现调幅之功能。 DSB信号波形与载波波形的相位关系是:在调制信号正半周期间,两者同相;负半周期间,两者反相。 通过实验了解到了调制度的计算方法 六.课程心得体会 通过本次实验,我们了解了振幅调制的工作原理并掌握了实现AM和DSB的方法,学会计算调制度,具体见实验结论。我们对集成乘法器幅度调制电路有了更好的了解,对他有了更深入的认识,提高了对通信电子电路的兴趣。 和模电实验的单独进行,通电实验增强了团队配合的能力,两个人的有效分工提高了实验的效率,减少了一个人的独自苦恼。

财务管理实训报告范文三篇

财务管理实训报告范文三篇 财务管理实训汇报范文格式一 在这个学期里,我们开展了财务管理课,期末学校跟着安排我们进行财务管理实训。以下是这次实训的一些详细情况,以及我的一些感悟领会。 这次实训在期末进行,时间为从xx月xx号至xx月xx号,共10个课时,大概持续一个星期。这次实训的目的是为了进一步稳固我们按模块教学所掌握的《财务管理》操作技能知识,全面检验我们财务会计核算综合运用技能,加强我们动手能力和实践操作能力,并为今后从事财务管理打下良好基础,而特开展的。这次实训要求我们能以企业的财务报表等核算资料为基础,对企业财务活动的过程和结果进行研究和评价,以分析企业在生产经营过程中的利弊得失、财务状况及开展趋势,并能为评价和改良财务财务管理工作及为将来进行经济决策提供重要的财务信息。实训内容分为三大块:一初步分析,二财务指标分析,三综合分析。 实训开始的第一步骤是公式计算。根据企业资产负债表以及利润表上的数据信息,再通过特定的公式把各项指标的构造比率、增长额和增长率等项目方案计算出来。这个工作的技术含量相比照较低,最要是考察我们对公式的理解程度以及运用程度,只要你熟悉公式,懂得运用公式,然后对号入座,几乎上就没什么大问习题了,但是要计

算的数据比较多,相对就变得繁琐,毕竟是一环扣一环的公式计算,这要求核算人员工作态度认真严谨。由于实训要求书面书写清洁整齐、标准、严禁挖乱、涂改和使用涂改液,所以我做的时候先在草稿上做一次,确认无误后,再填入实训资料。我平常是属于比较认真学习的那一类,所以这个公式计算没到四个课时,我就完成了,进展得相比照较顺利。可是进行第二步骤运用公式分析就遇到相当大的困难。 第二步骤公式分析、评价,也就是这次实训过程中最为关键、最为重要、最精华的一步,也是这次实训的主要内容以及主要目的。 第一步是对资产负债表以及利润表作初步分析。资产负债表总体分为三大块:资产、负债及所有者权益,而其中资产又分为流动资产和非流动资产,负债又分为流动负债和非流动负债。每一大块到每一小块,再到每一小块的细分都要进行分析小结,这点对初学者来说要求不低难度不少,或许是教师对我们期望值相当高,希望通过高要求打好我们基础,所以才安排大习题量并细分析。 大致上的资产总额构造分析,流动资产构造分析、非流动资产构造分析等,然后再细分下去的货币资金分析、应收账款分析、应收票据分析、其他应收款分析、存货分析等,通过教师的指导以及与同学们的讨论,我还是可以理解和分析的,可是明细的预付账款、原材料、固定资产和再建工程,就不知道怎么作出总结归纳好了。后来在课本上大量并且细微阅读有关内容,在网上大量疯狂的搜索有关资料,再根据资料通过自己的独立思考,渐渐的领悟很多财务分析的问习题,譬如对预付账款的分析,开始我只明白预付账款的字面意思,就是指

进程管理实验报告

进程的控制 1 .实验目的 通过进程的创建、撤消和运行加深对进程概念和进程并发执行的理解,明确进程与程序之间的区别。 【答:进程概念和程序概念最大的不同之处在于: (1)进程是动态的,而程序是静态的。 (2)进程有一定的生命期,而程序是指令的集合,本身无“运动”的含义。没有建立进程的程序不能作为1个独立单位得到操作系统的认可。 (3)1个程序可以对应多个进程,但1个进程只能对应1个程序。进程和程序的关系犹如演出和剧本的关系。 (4)进程和程序的组成不同。从静态角度看,进程由程序、数据和进程控制块(PCB)三部分组成。而程序是一组有序的指令集合。】2 .实验内容 (1) 了解系统调用fork()、execvp()和wait()的功能和实现过程。 (2) 编写一段程序,使用系统调用fork()来创建两个子进程,并由父进程重复显示字符串“parent:”和自己的标识数,而子进程则重复显示字符串“child:”和自己的标识数。 (3) 编写一段程序,使用系统调用fork()来创建一个子进程。子进程通过系统调用execvp()更换自己的执行代码,新的代码显示“new

program.”。而父进程则调用wait()等待子进程结束,并在子进程结束后显示子进程的标识符,然后正常结束。 3 .实验步骤 (1)gedit创建进程1.c (2)使用gcc 1.c -o 1编译并./1运行程序1.c #include #include #include #include void mian(){ int id; if(fork()==0) {printf(“child id is %d\n”,getpid()); } else if(fork()==0) {printf(“child2 id %d\n”,getpid()); } else {id=wait(); printf(“parent id is %d\n”,getpid()); }

北邮微波实验报告整理版

北京邮电大学信息与通信工程学院 微波实验报告 班级:20112111xx 姓名:xxx 学号:20112103xx 指导老师:徐林娟 2014年6月

目录 实验二分支线匹配器 (1) 实验目的 (1) 实验原理 (1) 实验内容 (1) 实验步骤 (1) 单支节 (2) 双支节 (7) 实验三四分之一波长阻抗变换器 (12) 实验目的 (12) 实验原理 (12) 实验内容 (13) 实验步骤 (13) 纯电阻负载 (14) 复数负载 (19) 实验四功分器 (23) 实验目的 (23) 实验原理 (23) 实验内容 (24) 实验步骤 (24) 公分比为1.5 (25) 公分比为1(等功分器) (29) 心得体会 (32)

201121111x 班-xx 号-xx ——电磁场与微波技术实验报告 实验二 分支线匹配器 实验目的 1.熟悉支节匹配器的匹配原理 2.了解微带线的工作原理和实际应用 3.掌握Smith 图解法设计微带线匹配网络 实验原理 支节匹配器是在主传输线上并联适当的电纳(或者串联适当的电抗),用附加的反射来抵消主传输线上原来的反射波,以达到匹配的目的。 单支节匹配器,调谐时主要有两个可调参量:距离d 和由并联开路或短路短截线提供的电纳。匹配的基本思想是选择d ,使其在距离负载d 处向主线看去的导纳Y 是Y0+jB 形式。然后,此短截线的电纳选择为-jB ,根据该电纳值确定分支短截线的长度,这样就达到匹配条件。 双支节匹配器,通过增加一个支节,改进了单支节匹配器需要调节支节位置的不足,只需调节两个分支线长度,就能够达到匹配(但是双支节匹配不是对任意负载阻抗都能匹配的,即存在一个不能得到匹配的禁区)。 微带线是有介质εr (εr >1)和空气混合填充,基片上方是空气,导体带条和接地板之间是介质εr ,可以近似等效为均匀介质填充的传输线,等效介质电常数为 εe ,介于1和εr 之间,依赖于基片厚度H 和导体宽度W 。而微带线的特性阻抗与其等效介质电常数为εe 、基片厚度H 和导体宽度W 有关。 实验内容 已知:输入阻抗Z 75in ,负载阻抗Z (6435)l j ,特性阻抗0Z 75 ,介质基片 2.55r ,1H mm 。 假定负载在2GHz 时实现匹配,利用图解法设计微带线单支节和双支节匹配网络,假设双支节网络分支线与负载的距离114d ,两分支线之间的距离为21 8 d 。画出几种可能的电路图并且比较输入端反射系数幅度从1.8GHz 至2.2GHz 的变化。 实验步骤 1.根据已知计算出各参量,确定项目频率。 2.将归一化阻抗和负载阻抗所在位置分别标在Smith 圆上。 3.设计单枝节匹配网络,在图上确定分支线与负载的距离以及分支线的长度,根据给定的介质基片、特性阻抗和频率用TXLINE 计算微带线物理长度和宽度。此处应该注意电长度和实际长度的联系。 4.画出原理图,在用微带线画出基本的原理图时,注意还要把衬底添加到图中,将各部分的参数填入。注意微带 分支线处的不均匀性所引起的影响,选择适当的模型。 5.负载阻抗选择电阻和电感串联的形式,连接各端口,完成原理图,并且将项目的频率改为1.8—2.2GHz 。 6.添加矩形图,添加测量,点击分析,测量输入端的反射系数幅值。 7.同理设计双枝节匹配网络,重复上面的步骤。

财务管理实验报告总结免费范文

财务管理实验报告总结免费范文 一、实验目的 二、实验成员角色分配 团队中的四个人必须有很强的团队意识和强大的凝聚力,这项工作本身就是一项相互配合与在相互帮助中完成的工作,每个人都负 有别人不可替代的任务。如果四个人当中有一个人缺少团队意识, 那只会有一种结果:必输无疑,无论其它人的个人业务水平有多高,因为每个人的工作都是紧密的相互关联、密不可分的。 三、实验过程及分析 (一)生产计划与实行 第一年,我们公司主要是生产低端产品,所以安装了三条生产线分别是两条低端L1,一条在建的中端M1,之所以我们在选择生产线 时选择的都是最贵的,是因为我们小组坚信,只要能生产出多的产品,就一定能盈利。但在产房的购买与租赁问题中,我们出现了错误,这个错误是到后面也无法弥补的。我们第一年选择了厂房租赁,规则上是说厂房租赁每年4万,可到实际操作中就不是这样了,厂 房每年的租金都会翻倍,这也使我们接下来几年的预算全部出错, 甚至在最后两年出现了紧急贷款的情况。 (二)财务变化分析 第一年,公司处于初创期,需要购置厂房、购买设备、聘用工人、采购原材料、生产产品,做好生产的准备。由于购买了设备、原材 料等,所以企业资产总计是呈增长的。处于初创期的企业意味着资 金只出无进,而且根据规则,企业第一年只能卖低端产品,导致资 金流出要大于资金流入,所以企业的营业利润、利润总额以及净利 润均呈负增长。 第二年,在扣除一系列费用之后,虽然公司资金有剩余,但还不足以满足公司本年的经营,所以我们选择了借入长期借款来满足公

司经营。在这一年企业继续购进原材料和设备来扩大生产,实现产 品多样化,同时加之上年所剩产成品使得本年资产总额继续上涨。 本年我们在销售低端产品的基础上增加了中端产品的销售,这一举 措让我们尝到了销售收入的甜头,公司营业利润以及净利润相比上 一年有大幅增长,呈正增长趋势,销售利润率也呈现上涨之势。 第三年,我们不甘于平稳的经营模式,决定扩大生产量,增加厂房和设备,并开始进军高端市场。虽然随之而来的是高额的成本费用,但由于我们公司所占的市场份额比重较高,所以销售收入也是 不菲的,营业利润及净利润几乎高出上一年的50%,销售利润率、 净资产收益率等盈利指标的增长也是可观的。 在第四年到第八年期间,我们企业本着平稳中有突破的精神,继续填置设备,积极扩大生产量,虽然在这期间存在销售状况下降的 情况,但总体销售状况是可观的。由于一些销售收入有回款期限, 所以也导致了企业资金缺乏,只能依靠借入长期贷款来满足企业经 营需求,并且在第七年我们也通过发行股票的方式来筹集资金。总 体而言,这几年的销售收入总是处于波动之中,第六年和第七年达 到最高,销售成本以及各项费用的支出情况也并不稳定,这使得企 业营业利润和净利润无法呈现出一个平稳的增长态势,造成这一结 果的原因之一可能是财务预算工作做得不够细致准确,对于预计销 售量的考虑过于简单。 (三)成本及财务指标分析 从费用控制来看,财务费用比较稳定,在第七年因为发行股票财务费用激增,在其他年份均低于行业水平,主要是我们每年从银行 借债不多,也没有出现过应收账款贴现的现象,表示我们从一开始 财务预算就是较合理的,没有出现过资金严重短缺的年份,但是由 于对系统了解不够充分,我们企业在后两年出现了紧急借款的现象,而且借款数目比较小,这说明在后两期由于业务大,成本高,主要 是原材料购买多,我们企业现金流出现断裂,应该在前期做多些贷款,避免出现紧急贷款这种失误。其次是管理费用,从管理费用分 年趋势图看,公司第一年管理费用最高,达到350000元,主要原因 是购买生产线,第二年、第三年管理费用分别是142000元、157500

操作系统实验报告--实验一--进程管理

实验一进程管理 一、目的 进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。 二、实验内容及要求 1、设计进程控制块PCB的结构(PCB结构通常包括以下信息:进程名(进程ID)、进程优先数、轮转时间片、进程所占用的CPU时间、进程的状态、当前队列指针等。可根据实验的不同,PCB结构的内容可以作适当的增删)。为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定。 2、系统资源(r1…r w),共有w类,每类数目为r1…r w。随机产生n进程P i(id,s(j,k),t),0<=i<=n,0<=j<=m,0<=k<=dt为总运行时间,在运行过程中,会随机申请新的资源。 3、每个进程可有三个状态(即就绪状态W、运行状态R、等待或阻塞状态B),并假设初始状态为就绪状态。建立进程就绪队列。 4、编制进程调度算法:时间片轮转调度算法 本程序用该算法对n个进程进行调度,进程每执行一次,CPU时间片数加1,进程还需要的时间片数减1。在调度算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了1个单位),这时,CPU时间片数加1,进程还需要的时间片数减1,并排列到就绪队列的尾上。 三、实验环境 操作系统环境:Windows系统。 编程语言:C#。 四、实验思路和设计 1、程序流程图

2、主要程序代码 //PCB结构体 struct pcb { public int id; //进程ID public int ra; //所需资源A的数量 public int rb; //所需资源B的数量 public int rc; //所需资源C的数量 public int ntime; //所需的时间片个数 public int rtime; //已经运行的时间片个数 public char state; //进程状态,W(等待)、R(运行)、B(阻塞) //public int next; } ArrayList hready = new ArrayList(); ArrayList hblock = new ArrayList(); Random random = new Random(); //ArrayList p = new ArrayList(); int m, n, r, a,a1, b,b1, c,c1, h = 0, i = 1, time1Inteval;//m为要模拟的进程个数,n为初始化进程个数 //r为可随机产生的进程数(r=m-n) //a,b,c分别为A,B,C三类资源的总量 //i为进城计数,i=1…n //h为运行的时间片次数,time1Inteval为时间片大小(毫秒) //对进程进行初始化,建立就绪数组、阻塞数组。 public void input()//对进程进行初始化,建立就绪队列、阻塞队列 { m = int.Parse(textBox4.Text); n = int.Parse(textBox5.Text); a = int.Parse(textBox6.Text); b = int.Parse(textBox7.Text); c = int.Parse(textBox8.Text); a1 = a; b1 = b; c1 = c; r = m - n; time1Inteval = int.Parse(textBox9.Text); timer1.Interval = time1Inteval; for (i = 1; i <= n; i++) { pcb jincheng = new pcb(); jincheng.id = i; jincheng.ra = (random.Next(a) + 1); jincheng.rb = (random.Next(b) + 1); jincheng.rc = (random.Next(c) + 1); jincheng.ntime = (random.Next(1, 5)); jincheng.rtime = 0;

北京邮电大学通信原理软件实验报告

北京邮电大学实验报告 题目:基于SYSTEMVIEW通信原理实验报告

实验一:验证抽样定理 一、实验目的 1、掌握抽样定理 2. 通过时域频域波形分析系统性能 二、实验原理 低通滤波器频率与m(t)相同 三、实验步骤 1. 要求三个基带信号相加后抽样,然后通过低通滤波器恢复出原信号。 2. 连接各模块完成系统,同时在必要输出端设置观察窗。 3. 设置各模块参数。 三个基带信号的频率从上到下分别设置为10hz、12hz、14hz。 抽样信号频率设置为28hz,即2*14hz。(由抽样定理知,) 将低通滤波器频率设置为14hz,则将恢复第三个信号(其频率为14hz)进行系统定时设置,起始时间设为0,终止时间设为1s.抽样率设为1khz。 3.观察基带信号、抽样后的信号、最终恢复的信号波形

四、实验结果 最上面的图为原基带信号波形,中间图为最终恢复的信号波形,最下面的图为抽样后的信号波形。 五、实验讨论 从实验结果可以看出,正如前面实验原理所述,满足抽样定理的理想抽样应该使抽样后的波形图如同冲激信号,且其包络图形为原基带信号波形图。抽样后的信号通过低通滤波器后,恢复出的信号波形与原基带信号相同。 由此可知,如果每秒对基带模拟信号均匀抽样不少于2次,则所得样值序列含有原基带信号的全部信息,从该样值序列可以无失真地恢复成原来的基带信号。 讨论:若抽样速率少于每秒2次,会出现什么情况? 答:会产生失真,这种失真被称为混叠失真。 六、实验建议、意见 增加改变抽样率的步骤,观察是否产生失真。

实验二:奈奎斯特第一准则 一、实验目的 (1)理解无码间干扰数字基带信号的传输; (2)掌握升余弦滚降滤波器的特性; (3)通过时域、频域波形分析系统性能。 二、实验原理 在现代通信系统中,码元是按照一定的间隔发送的,接收端只要能够正确地恢复出幅度序列,就能够无误地恢复传送的信号。因此,只需要研究如何使波形在特定的时刻无失真,而不必追求整个波形不变。 奈奎斯特准则提出:只要信号经过整形后能够在抽样点保持不变,即使其波形已经发生了变化,也能够在抽样判决后恢复原始的信号,因为信息完全恢复携带在抽样点幅度上。 奈奎斯特准则要求在波形成形输入到接收端的滤波器输出的整个传送过程传递函数满足:,其充分必要条件是x(t)的傅氏变换X ( f )必须满足 奈奎斯特准则还指出了信道带宽与码速率的基本关系。即R B =1/T B =2? N =2B N。 式中R b 为传码率,单位为比特/每秒(bps)。f N 和B N 分别为理想信道的低通截止 频率和奈奎斯特带宽。上式说明了理想信道的频带利用率为R B /B N =2。 在实际应用中,理想低通滤波器是不可能实现的,升余弦滤波器是在实际中满足无码间干扰传输的充要条件,已获得广泛应用的滤波器。 升余弦滤波器的带宽为:。其中,α为滚降系数,0 ≤α≤1, 三、实验步骤 1.根据奈奎斯特准则,设计实现验证奈奎斯特第一准则的仿真系统,同时在必 要输出端设置观察窗。设计图如下

财务管理实训心得

财务管理实训心得体会 为期一周的财务管理实训结束了,这一周的实习让我深深感到理论和实践的巨大差异。原本自认为财务管理这门课学得不错,但当模拟到真实工作环境中时,却感到力不从心。大量的数据,业务以及分析是我完全没有预料到的。尽管有些可以运用所学的理论知识解决,但是在许多时候并没有想象的那么简单和顺利。整个实训包括以下几个部分: 1、财务分析报告:在财务分析报告中,又包括三方面内容:水平分析、垂直分析和财务效率指标分析。水平分析是对连续两年的报表历史数据进行分析,进行横向数据对比,通过差异额及差异率对企业经营的变化作出分析。垂直分析是对连续两年的报表历史数据进行分析,通过纵向的相对指标看出各项目对总资产的影响,再通过差额比较出两年数据间的不同而得到企业经营状况的差异及趋势。财务效率指标,通过对企业两年的偿债能力分析、营运能力分析、盈利能力分析和增长能力分析得到企业在各个方面的能力,尽管这些指标存在一定的误区,但也能从一定程度上了解到企业的很多实际情况。 2、预算报表:预算报表是全面预算管理的一部分内容,根据经验数据(销售量、单价),先计算出销售总额得出了预计的首先计划;再凭借着以销定产的思路,抛出库存量,计算得到生产量及需要采购的量,而得到费用支出计划表;然后再依次算出预计直接人工、预计制造费用、预计销售及管理费用,从而可填列现金预算表。通过上述工

作,我们就可以计算得到预计的资产负债表和利润表。 3、资金筹集管理:根据实验资料的要求,企业预计的借款及还款金额和时间,我们可以填制还款计划表:由资金的总需求量减去利润留用和折旧(非付现成本)剩下的就需要外部融资,正如该公司向银行举债。 4、投资财务可行性分析报告:该报告是假设企业投资一条新生产线,而在未来五年生产经营而取得收益。同样我们用以销定产的思路,先根据销售量估算出现金收入估算表,然后在估算出直接材料、直接人工、制造费用销售及管理费用,再得出现金流量估算表,最后根据上述数据就可以计算得到净现值、获利指数、内含报酬率和投资回收期这些财务指标。再通过这些财务指标的数据来分析得出此投资是否可行。 在我看来,第一部分必须从全局上准确把握整个趋势,并且通过一层层仔细分析,最终找出导致变化的因素。比如说:公司期末负债比期初增加了14.94%,主要是由于流动负债的增加,而它的增加又是因为短期借款大幅上升。只有这样才能有针对性地对其进行改善。除此之外我发现自己对企业财务报表分析的基本方法和技巧不熟练。像杜邦分析、改进的杜邦分析都不清楚,因此在做的过程中对数字感觉很模糊,没有十足的把握。第二部分并不难,最重要的是要细心和耐心。虽然做财务管理工作有很多相同的重复工作,但是却是容不得一点马虎的,因为一个小小的错误也会造成重大的财务损失。

昆明理工大学进程管理实验报告

昆明理工大学信息工程与自动化学院学生实验报告 (2010 —2011 学年第二学期) 课程名称:操作系统开课实验室:年月日 目录 一、实验目的 (1) 二、实验原理及基本技术路线图 (1) 1. 进程的状态转换图 (2) 2. 各原语的功能说明 (2) 3.多级反馈队列调度算法的描述 (3) 4. 程序功能结构图 (4) 5. 流程图 (4) 6. 数据结构定义 (5) 7. 主要变量的说明 (6) 8. 函数的说明 (6) 四、实验方法、步骤 (6) 五、实验过程原始记录 (18) 六、实验结果、分析和结论 (21) 一、实验目的 通过编写进程管理的算法,要求学生掌握整个进程管理的各个环节,进程的数据结构描述,进程的各种状态之间的转换,以及进程的调度算法。以加深对进程的概念及进程调度算法的理解,并且提高链表的应用能力,达到提高编程能力的目的。 二、实验原理及基本技术路线图(方框原理图) 用C语言或C++语言开发。需要定义PCB的数据结构,用链表的形式管理进程,采用

多级反馈队列调度的算法模拟进程的控制。要求有创建、撤销、调度、阻塞、唤醒进程等功能。 1.进程的状态转换图: 2.各原语的功能说明: -进程创建原语:进程创建是调用创建原语来实现。创建原语扫描系统的PCB链表,在找到一定PCB 链表之后,填入调用者提供的有关参数(这些参数包括:进程名、进程优先级P0、进程正文段起始地址d0、资源清单R0等),最后形成代表进程的PCB结构。 -进程撤销(终止): 撤消原语首先检查PCB进程链或进程家族,寻找所要撤消的进程是否存在。如果找到了所要撤消的进程的PCB结构,则撤消原语释放该进程所占有的资源之后,把对应的PCB结构从进程链或进程家族中摘下并返回给PCB空队列。如果被撤消的进程有自己的子进程,则撤消原语先撤消其子进程的PCB结构并释放子进程所占用的资源之后,再撤消当前进程的PCB结构和释放其资源。

北邮arduino实验报告

电子电路综合实验设计 实验名称: 基于 Arduino 的电压有效值测量电路设计与实现 学院: 班级: 学号: 姓名: 班内序号:

实验 基于Arduino 的电压有效值测量电路设计与实现 一. 摘要 Arduino是一个基于开放原始码的软硬件平台,可用来开发独立运作、并具互动性的电子产品,也可以开发与PC 相连的周边装置,同时能在运行时与PC 上的软件进行交互。为了测量正弦波电压有效值,首先我们设计了单电源供电的半波整流电路,并进行整流滤波输出,然后选择了通过Arduino设计了读取电压有效值的程序,并实现使用此最小系统来测量和显示电压有效值。在频率和直流电压幅度限定在小范围的情况下,最小系统的示数基本和毫伏表测量的值相同。根据交流电压有效值的定义,运用集成运放和设计的Arduino最小系统的结合,实现了运用少量元器件对交流电压有效值的测量。 关键字:半波整流整流滤波 Arduino最小系统读取电压有效值 二. 实验目的 1、熟悉Arduino 最小系统的构建和使用方法; 2、掌握峰值半波整流电路的工作原理; 3、根据技术指标通过分析计算确定电路形式和元器件参数; 4、画出电路原理图(元器件标准化,电路图规范化); 5、熟悉计算机仿真方法; 6、熟悉Arduino 系统编程方法。 三. 实验任务及设计要求 设计实现 Arduino 最小系统,并基于该系统实现对正弦波电压有效值的测量和显示。 1、基本要求 (1)实现Arduino 最小系统,并能下载完成Blink 测试程序,驱动Arduino 数字13 口LED 闪烁; (2)电源部分稳定输出5V 工作电压,用于系统供电; (3)设计峰值半波整流电路,技术指标要求如下:

财务管理实训报告总结三篇】

财务管理实训报告总结【三篇】 篇一 财务管理技能实训是一种理论知识与实践技能有效结合与综合使用的训练平台。这学期财务管理实训的几次模拟经营课程,让我受益颇多。我们小组经营的公司是电子科技有限公司,我在公司担任的是资金经理的角色,主要负责现金流量表的预测和管理。我同我们小组成员一起来对我们模拟公司的经营实行了决策和管理。因为我们公司第一季度经营良好,第三季度有所下降,从第五季度开始净利润都出现了稳定的增长。所以,接下来我将对公司第一、第二、第三、第五、第六季度的现金流量表的一些情况做简短的分析,同时,总结出一些我在这次的模拟经营实训的几点心得。 现金流量是投资决策考虑的关键指标,它是实行企业价值判断的重要指标,是企业持续经营的基本保障,也是企业扩大再生产的资源保障,同时还是影响企业流动性强弱的决定因素。对于企业来说,若在购买生产线之前未对预计当期现金流出和下季初费用扣除加以计算,就无法安排好筹资案,企业将很可能出现资金链的断裂。如果通过紧急贷款补足负的现金流量,之后只好通过借款维持经营,借款的额度又受财务状况的直接影响,这样的话,企业容易走入到一个财务困境中。所以,科学地分析和利用现金流量表是报表使用者实行准确决策的前提之一。 (一)第一季度因为公司成立刚刚成立,需要购买原材料,生产设备等基础设施以及雇佣工人和产房租赁,从而公司产生了一批投资资金和运营资金以及劳务资金流出。但是,公司向银行贷款,填补了资金缺失,使得本季度期末现金及现金等价物余额达到了509800元。现金流量表具体情况如下:(1)经营活动产生的现金流中:购买商品、接受劳务支付现金304200元;支付给职工以及职工支付的现金150000元;支付的其他与经营活动相关的现金338700元(2)投资活动产生的现

操作系统-进程管理实验报告

实验一进程管理 1.实验目的: (1)加深对进程概念的理解,明确进程和程序的区别; (2)进一步认识并发执行的实质; (3)分析进程争用资源的现象,学习解决进程互斥的方法; (4)了解Linux系统中进程通信的基本原理。 2.实验预备内容 (1)阅读Linux的sched.h源码文件,加深对进程管理概念的理解; (2)阅读Linux的fork()源码文件,分析进程的创建过程。 3.实验内容 (1)进程的创建: 编写一段程序,使用系统调用fork() 创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”,子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。 源代码如下: #include #include #include #include #include int main(int argc,char* argv[]) { pid_t pid1,pid2; pid1 = fork(); if(pid1<0){ fprintf(stderr,"childprocess1 failed"); exit(-1); } else if(pid1 == 0){ printf("b\n"); } 1/11

else{ pid2 = fork(); if(pid2<0){ fprintf(stderr,"childprocess1 failed"); exit(-1); } else if(pid2 == 0){ printf("c\n"); } else{ printf("a\n"); sleep(2); exit(0); } } return 0; } 结果如下: 分析原因: pid=fork(); 操作系统创建一个新的进程(子进程),并且在进程表中相应为它建立一个新的表项。新进程和原有进程的可执行程序是同一个程序;上下文和数据,绝大部分就是原进程(父进程)的拷贝,但它们是两个相互独立的进程!因此,这三个进程哪个先执行,哪个后执行,完全取决于操作系统的调度,没有固定的顺序。 (2)进程的控制 修改已经编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。 将父进程的输出改为father process completed 2/11

北邮通信原理实验报告

北京邮电大学通信原理实验报告 学院:信息与通信工程学院班级: 姓名: 姓名:

实验一:双边带抑制载波调幅(DSB-SC AM ) 一、实验目的 1、了解DSB-SC AM 信号的产生以及相干解调的原理和实现方法。 2、了解DSB-SC AM 信号波形以及振幅频谱特点,并掌握其测量方法。 3、了解在发送DSB-SC AM 信号加导频分量的条件下,收端用锁相环提取载波的原理及其实现方法。 4、掌握锁相环的同步带和捕捉带的测量方法,掌握锁相环提取载波的调试方法。 二、实验原理 DSB 信号的时域表达式为 ()()cos DSB c s t m t t ω= 频域表达式为 1 ()[()()]2 DSB c c S M M ωωωωω=-++ 其波形和频谱如下图所示 DSB-SC AM 信号的产生及相干解调原理框图如下图所示

将均值为零的模拟基带信号m(t)与正弦载波c(t)相乘得到DSB—SC AM信号,其频谱不包含离散的载波分量。 DSB—SC AM信号的解调只能采用相干解调。为了能在接收端获取载波,一种方法是在发送端加导频,如上图所示。收端可用锁相环来提取导频信号作为恢复载波。此锁相环必须是窄带锁相,仅用来跟踪导频信号。 在锁相环锁定时,VCO输出信号sin2πf c t+φ与输入的导频信号cos2πf c t 的频率相同,但二者的相位差为φ+90°,其中很小。锁相环中乘法器的两个 输入信号分别为发来的信号s(t)(已调信号加导频)与锁相环中VCO的输出信号,二者相乘得到 A C m t cos2πf c t+A p cos2πf c t?sin2πf c t+φ =A c 2 m t sinφ+sin4πf c t+φ+ A p 2 sinφ+sin4πf c t+φ 在锁相环中的LPF带宽窄,能通过A p 2 sinφ分量,滤除m(t)的频率分量及四倍频载频分量,因为很小,所以约等于。LPF的输出以负反馈的方式控制VCO,使其保持在锁相状态。锁定后的VCO输出信号sin2πf c t+φ经90度移相后,以cos2πf c t+φ作为相干解调的恢复载波,它与输入的导频信号cos2πf c t 同频,几乎同相。 相干解调是将发来的信号s(t)与恢复载波相乘,再经过低通滤波后输出模拟基带信号 A C m t cos2πf c t+A p cos2πf c t?cos2πf c t+φ =A c 2 m t cosφ+cos4πf c t+φ+ A p 2 cosφ+cos4πf c t+φ 经过低通滤波可以滤除四倍载频分量,而A p 2 cosφ是直流分量,可以通过隔直

财务管理模拟实习报告doc

财务管理模拟实习报告 篇一:财务管理模拟实验报告 财务管理模拟实验报告 一、实验过程 1、组建模拟公司,建立管理团队 以小组为单位组建模拟公司,注册公司名称,建立管理团队(每组6人),准备参与模拟竞争。首先,推选公司总裁,然后,由总裁根据公司生产经营管理的需要进行职能分工,确定财务总监、市场总监、销售总监、供应总监、信息总监等岗位人选,并明确各自具体职责。 2、规划公司经营,编制财务预算 在熟悉模拟公司市场竞争规则的前提下,各公司召开年度财务计划工作会议,对公司目前所处的外部经营环境和内部运营条件进行分析,研究生产经营管理过程中蕴藏着的有利机会和主要威胁,确立公司经营战略和财务管理目标,编制年度财务预算。 公司经营管理战略包括新产品开发战略、新市场进入战略、投资战略、竞争战略等。 财务管理目标可选择利润最大化、股东财富最大化或企业价值最大化等目标。 年度财务预算包括现金预算、生产预算、综合费用预算、销售预算、广告费预算、经营预算、投资预算、管理费用预

算、财务费用预算等。 3、经营模拟公司,开展财务活动 每年年初,根据公司对市场的分析,依据广告费预算,参加产品订货会,支付广告费,登记销售订单;根据上年度财务成果,支付应交税费、应付股利。由于我公司前两年亏损高达38百万,所以在以后年度需将亏损补足才能计提所得税,股利分配也是到第五年盈利较多才开始分配,第六年也采用固定股利支付率政策进行了股利分配。 每年度,根据公司短期融资需要,申请或偿还短期借款,投资(变卖或转产)生产线,订购原材料,支付应付账款,原材料入库,产品生产,按订单交货,收回应收账款,新产品研发投资,支付公司行政管理费。为了赢利,于第一年一季度开始研发乙产品,同时开始安装半自动生产线一条来生产乙产品,为了扩大生产,到第二年一季度租入Y厂房来安装生产线,另外又安装一条半自动生产线生产乙产品,应市场需求,第三年一季度,又为了合理生产乙产品,又开始安装办自动生产线。每年年末,根据公司长期资金需求,确定具体筹资方式,包括申请或归还长期贷款、发行股票等,新市场开拓投资,ISO资格认证投资,支付设备维修费,构建或融资租入厂房,计提固定资产折旧,进行股利分配。我公司于第一年年末申请了四年期长期贷款83百万,后来又借了7百万,总计90百万,第三年年末发行了四年期债券24

相关文档
最新文档