当前位置:文档之家› Linux内部的时钟处理机制全面剖析

Linux内部的时钟处理机制全面剖析

Linux内部的时钟处理机制全面剖析
Linux内部的时钟处理机制全面剖析

Linux内部的时钟处理机制全面剖析

在Linux 操作系统中,很多活动都和时间有关,例如:进程调度和网络处理等等。所以说,了解Linux 操作系统中的时钟处理机制有助于更好地了解Linux 操作系统的运作方式。本文分析了Linux 2.6.25 内核的时钟处理机制,首先介绍了在计算机系统中的一些硬件计时器,然后重点介绍了Linux 操作系统中的硬件时钟和软件时钟的处理过程以及软件时钟的应用。最后对全文进行了总结。

◆1、计算机系统中的计时器

在计算机系统中存在着许多硬件计时器,例如Real Timer Clock (RTC )、Time Stamp Counter (TSC )和Programmable Interval Timer (PIT )等等。

这部分内容不是本文的中点,这里仅仅简单介绍几种,更多内容参见参考文献:

1.Real Timer Clock (RTC ):

a. 独立于整个计算机系统(例如:CPU 和其他chip )

b. 内核利用其获取系统当前时间和日期

2.Time Stamp Counter (TSC ):

a. 从Pentium 起,提供一个寄存器TSC,用来累计每一次外部振荡器产生的时钟信号

b. 通过指令rdtsc 访问这个寄存器

c. 比起PIT,TSC 可以提供更精确的时间测量

3.Programmable Interval Timer (PIT ):

a.时间测量设备

b.内核使用的产生时钟中断的设备,产生的时钟中断依赖于硬件的体系结

构,慢的为10 ms 一次,快的为 1 ms 一次

4.High Precision Event Timer (HPET ):

a.PIT 和RTC 的替代者,和之前的计时器相比,HPET 提供了更高的时

钟频率(至少10 MHz )以及更宽的计数器宽度(64位)

b.一个HPET 包括了一个固定频率的数值增加的计数器以及3到32个独

立的计时器,这每一个计时器有包涵了一个比较器和一个寄存器(保存

一个数值,表示触发中断的时机)。每一个比较器都比较计数器中的数

值和寄存器中的数值,当这两个数值相等时,将产生一个中断

◆2、硬件时钟处理

这里所说的硬件时钟处理特指的是硬件计时器时钟中断的处理过程。

2.1 数据结构

和硬件计时器(本文又称作硬件时钟,区别于软件时钟)相关的数据结构主要有两个:

a.struct clocksource :对硬件设备的抽象,描述时钟源信息

b.struct clock_event_device :时钟的事件信息,包括当硬件时钟中断发生时

要执行那些操作(实际上保存了相应函数的指针)。本文将该结构称作为“时钟事件设备”。

上述两个结构内核源代码中有较详细的注解,分别位于文件clocksource.h 和clockchips.h 中。需要特别注意的是结构clock_event_device 的成员

event_handler ,它指定了当硬件时钟中断发生时,内核应该执行那些操作,也就是真正的时钟中断处理函数。在2.3节“时钟初始化”部分会介绍它真正指向哪个函数。

Linux 内核维护了两个链表,分别存储了系统中所有时钟源的信息和时钟事件设备的信息。这两个链表的表头在内核中分别是clocksource_list 和clockevent_devices 。图2-1显示了这两个链表。

图2-1 时钟源链表和时钟事件链表

2.2 通知链技术(notification chain )

在时钟处理这部分中,内核用到了所谓的“通知链(notification chain )”技术。所以在介绍时钟处理过程之前先来了解下“通知链”技术。

在Linux 内核中,各个子系统之间有很强的相互关系,一些被一个子系统生成或者被探测到的事件,很可能是另一个或者多个子系统感兴趣的,也就是说这个事件的获取者必须能够通知所有对该事件感兴趣的子系统,并且还需要这种通知机制具有一定的通用性。基于这些,Linux 内核引入了“通知链”技术。

2.2.1 数据结构:

通知链有四种类型,

1.原子通知链(Atomic notifier chains ):通知链元素的回调函数(当事件

发生时要执行的函数)只能在中断上下文中运行,不允许阻塞

2.可阻塞通知链(Blocking notifier chains ):通知链元素的回调函数在进

程上下文中运行,允许阻塞

3.原始通知链(Raw notifier chains ):对通知链元素的回调函数没有任何

限制,所有锁和保护机制都由调用者维护

4.SRCU 通知链(SRCU notifier chains ):可阻塞通知链的一种变体

所以对应了四种通知链头结构:

1.struct atomic_notifier_head :原子通知链的链头

2. struct blocking_notifier_head :可阻塞通知链的链头

3.struct raw_notifier_head :原始通知链的链头

4.struct srcu_notifier_head :SRCU 通知链的链头

通知链元素的类型:

1.struct notifier_block :通知链中的元素,记录了当发出通知时,应该执行的操作(即回调函数)

链头中保存着指向元素链表的指针。通知链元素结构则保存着回调函数的类型以及优先级,参见notifier.h 文件。

2.2.2 运作机制

通知链的运作机制包括两个角色:

a. 被通知者:对某一事件感兴趣一方。定义了当事件发生时,相应的处理函数,即回调函数。但需要事先将其注册到通知链中(被通知者注册的动作就是在通知链中增加一项)。

b. 通知者:事件的通知者。当检测到某事件,或者本身产生事件时,通知所有对该事件感兴趣的一方事件发生。他定义了一个通知链,其中保存了每一个被通知者对事件的处理函数(回调函数)。通知这个过程实际上就是遍历通知链中的每一项,然后调用相应的事件处理函数。

包括以下过程:

1.通知者定义通知链

2.被通知者向通知链中注册回调函数

3.当事件发生时,通知者发出通知(执行通知链中所有元素的回调函数)

被通知者调用notifier_chain_register 函数注册回调函数,该函数按照优先级将回调函数加入到通知链中。注销回调函数则使用notifier_chain_unregister 函数,即将回调函数从通知链中删除。2.2.1节讲述的4种通知链各有相应的注册和注销函数,但是他们最终都是调用上述两个函数完成注册和注销功能的。有兴趣的读者可以自行查阅内核代码。

通知者调用notifier_call_chain 函数通知事件的到达,这个函数会遍历通知链中所有的元素,然后依次调用每一个的回调函数(即完成通知动作)。2.2.1节讲述的4种通知链也都有其对应的通知函数,这些函数也都是最终调用notifier_call_chain 函数完成事件的通知。

由以上的叙述,“通知链”技术可以概括为:事件的被通知者将事件发生时应该执行的操作通过函数指针方式保存在链表(通知链)中,然后当事件发生时通知者依次执行链表中每一个元素的回调函数完成通知。

2.3 时钟初始化

内核初始化部分(start_kernel 函数)和时钟相关的过程主要有以下几个:

1.tick_init()

2.init_timers()

3.hrtimers_init()

4.time_init()

函数hpet_enable 检测系统是否可以使用hpet 时钟,如果可以则初始化hpet 时钟。否则初始化pit 时钟。最后设置硬件时钟发生时的处理函数(参见2.4节)。

初始化硬件时钟这个过程主要包括以下两个过程(参见hpet_enable 的实现):

1.初始化时钟源信息(struct clocksource 类型的变量),并将其添加到时

钟源链表中,即clocksource_list 链表(参见图2-1)。

2.初始化时钟事件设备信息(struct clock_event_device 类型的变量),并

向通知链clockevents_chain 发布通知:一个时钟事件设备要被添加到系统中。

在通知(执行回调函数)结束后,该时钟事件设备被添加到时钟事件设备链表中,即clockevent_devices 链表(参见图2-1)。有关通知链的内容参见2.2节。

需要注意的是在初始化时钟事件设备时,全局变量global_clock_event 被赋予了相应的值。该变量保存着系统中当前正在使用的时钟事件设备(保存了系统当前使用的硬件时钟中断发生时,要执行的中断处理函数的指针)。

为了说明这个问题,不妨假设系统中使用的是hpet 时钟。由2.3.3节可知global_clock_event 指向hpet 时钟事件设备(hpet_clockevent )。查看

由代码可知:对于新加入时钟事件设备这个事件,将会调用函数

tick_check_new_device 。顺着该函数的调用序列向下查找。

tick_set_periodic_handler 函数将时钟事件设备的event_handler 成员赋值为

tick_handle_periodic 函数的地址。由此可知,函数tick_handle_periodic 为硬件时钟中断发生时,真正的运行函数。

函数tick_handle_periodic 的处理过程分成了以下两个部分:

1.全局处理:整个系统中的信息处理

2.局部处理:局部于本地CPU 的处理

总结一下,一次时钟中断发生后,OS 主要执行的操作

(tick_handle_periodic ):

1. 全局处理(仅在一个CPU 上运行):

1.更新jiffies_64

2.更新xtimer 和当前时钟源信息等

3.根据tick 计算avenrun 负载

2\ 局部处理(每个CPU 都要运行):

1.根据当前在用户态还是核心态,统计当前进程的时间:用户态时间

还是核心态时间

2.唤醒TIMER_SOFTIRQ 软中断

3.唤醒RCU 软中断

4.调用scheduler_tick (更新进程时间片等等操作,更多内容参见参

考文献)

5.profile_tick 函数调用

以上就介绍完了硬件时钟的处理过程,下面来看软件时钟。

◆3、软件时钟处理

这里所说“软件时钟”指的是软件定时器(Software Timers),是一个软件上的概念,是建立在硬件时钟基础之上的。它记录了未来某一时刻要执行的操作(函数),并使得当这一时刻真正到来时,这些操作(函数)能够被按时执行。举个例子说明:它就像生活中的闹铃,给闹铃设定振铃时间(未来的某一时间)后,当时间(相当于硬件时钟)更新到这个振铃时间后,闹铃就会振铃。这个振铃时间好比软件时钟的到期时间,振铃这个动作好比软件时钟到期后要执行的函数,而闹铃时间更新好比硬件时钟的更新。

实现软件时钟原理也比较简单:每一次硬件时钟中断到达时,内核更新的jiffies ,然后将其和软件时钟的到期时间进行比较。如果jiffies 等于或者大于软件时钟的到期时间,内核就执行软件时钟指定的函数。

接下来的几节会详细介绍Linux2.6.25 是怎么实现软件时钟的。

3.1 相关数据结构

1.struct timer_list :软件时钟,记录了软件时钟的到期时间以及到期后要执行的操作。具体的成员以及含义见表3-1。

2.struct tvec_base :用于组织、管理软件时钟的结构。在SMP 系统中,每个CPU

有一个。具体的成员以及含义参见表3-2。

表3-2 struct tvec_base 类型的成员

域名类型描述

lock spinlock_t 用于同步操作

running_timer struct

timer_list *

正在处理的软件时钟

timer_jiffies unsigned

long

当前正在处理的软件时钟到期时间

tv1 struct

tvec_root 保存了到期时间从timer_jiffies 到timer_jiffies +

之间(包括边缘值)的所有软件时钟

tv2 struct tvec

保存了到期时间从timer_jiffies + 到timer_jiffies

+之间(包括边缘值)的所有软件时钟

tv3 struct tvec

保存了到期时间从timer_jiffies +到timer_jiffies

+之间(包括边缘值)的所有软件时钟

tv4 struct tvec

保存了到期时间从timer_jiffies +到timer_jiffies

+之间(包括边缘值)的所有软件时钟

tv5 struct tvec

保存了到期时间从timer_jiffies +到timer_jiffies

+之间(包括边缘值)的所有软件时钟

可见它们实际上就是类型为struct list_head 的数组,其中TVN_SIZE 和TVR_SIZE 在系统没有配置宏CONFIG_BASE_SMALL 时分别被定义为64和256。

3.2 数据结构之间的关系

图3-1显示了以上数据结构之间的关系

从图中可以清楚地看出:软件时钟(struct timer_list ,在图中由timer 表示)以双向链表(struct list_head )的形式,按照它们的到期时间保存相应的桶(tv1~tv5 )中。tv1 中保存了相对于timer_jiffies 下256个tick 时间内到期的所有软件时钟;tv2 中保存了相对于timer_jiffies 下256*64个tick 时间内到期的所有软件时钟;tv3 中保存了相对于timer_jiffies 下256*64*64个tick 时间内到期的所有软件时钟;tv4 中保存了相对于timer_jiffies 下

256*64*64*64个tick 时间内到期的所有软件时钟;tv5 中保存了相对于timer_jiffies 下256*64*64*64*64个tick 时间内到期的所有软件时钟。具体的

还需要注意的是软件时钟的处理是局部于CPU 的,所以在SMP 系统中每一个CPU 都保存一个类型为struct tvec_base 的变量,用来组织、管理本CPU 的软件时钟。从图中也可以看出struct tvec_base 变量是per-CPU 的(关于

per-CPU 的变量原理和使用参见参考资料)。

由于以后的讲解经常要提到每个CPU 相关的struct tvec_base 变量,所以为了方便,称保存软件时钟的struct tvec_base 变量为该软件时钟的base ,或称CPU 的base 。

3.3 添加或删除软件时钟

在了解了软件时钟的数据组织关系之后,现在来看一下如何添加以及删除一个软件时钟。

3.3.1 添加软件时钟

在Linux 内核中要添加一个软件时钟,首先必须分配struct timer_list 类型的变量,然后调用函数add_timer() 将该软件时钟添加到相应调用add_timer 函数的CPU 的base 中。Add_timer 是对函数__mod_timer() 的一层包装。函数__mod_timer() 的代码如清单3-2:

清单3-2 __mod_timer 函数

清单3-2 __mod_timer 函数

代码解释:

1.取得软件时钟所在base 上的同步锁(struct tvec_base 变量中的自旋

锁),并返回该软件时钟的base ,保存在base 变量中

2.如果该软件时钟处在pending 状态(在base 中,准备执行),则卸载该

软件时钟

3.取得本CPU 上的base 指针(类型为struct tvec_base* ),保存在

new_base 中

4.如果base 和new_base 不一样,也就是说软件时钟发生了迁移(从一个

CPU 中移到了另一个CPU 上),那么如果该软件时钟的处理函数当前没有

代码解释:

1.计算该软件时钟的到期时间和timer_jiffies (当前正在处理的软件时钟的到期时间)的差值,作为索引保存到idx 变量中。

2.判断idx 所在的区间,在

a\ [0, ]或者( , 0)(该软件时钟已经到期),则将要添加到tv1 中

b\ [, ],则将要添加到tv2 中

c\ [, ],则将要添加到tv3 中

d\ [, ],则将要添加到tv4 中

e\ [, ),则将要添加到tv5 中,但实际上最大值为0xffffffffUL

3.计算所要加入的具体位置(哪个链表中,即tv1~tv5 的哪个子链表,参考图

3-1)

4.最后将其添加到相应的链表中

从这个函数可以得知,内核中是按照软件时钟到期时间的相对值(相对于timer_jiffies 的值)将软件时钟添加到软件时钟所在的base 中的。

代码解释:

1.检测该软件时钟是否处在pending 状态(在base 中,准备运行),如果

不是则直接函数返回

2.如果处于pending 状态,则获得锁

3.再次检测软件时钟是否处于pending 状态(该软件时钟可能被卸载了),

不是则释放锁然后函数返回

4.如果还是pending 状态,则将其卸载,之后释放锁,函数返回

del_timer_sync 函数无限循环试图卸载该软件时钟,直到该软件时钟能够被成功卸载。从其实现中可以看出:如果一个软件时钟的处理函数正在执行时,对其的卸载操作将会失败。一直等到软件时钟的处理函数运行结束后,卸载操作才会成功。这样避免了在SMP 系统中一个CPU 正在执行软件时钟的处理函数,而另一个CPU 则要将该软件时钟卸载所引发的问题。

3.3 时钟的软中断处理

软件时钟的处理是在时钟的软中断中进行的。

3.3.1 软中断初始化

软中断的一个重要的处理时机是在每个硬件中断处理完成后(参见irq_exit 函数),且由2.4节的内容可知:在硬件时钟中断处理中,会唤醒时钟的软中断,所以每次硬件时钟中断处理函数执行完成后都要进行时钟的软中断处理。和时钟相关的软中断是TIMER_SOFTIRQ ,其处理函数为run_timer_softirq ,该函数用来处理所有的软件时钟。这部分初始化代码在函数init_timers 中进行,如清单3-7

清单3-7 init_timers 函数

void __init init_timers(void)

代码解释:

1.获得base 的同步锁

2.如果jiffies 大于等于timer_jiffies (当前正要处理的软件时钟的到期时

间,说明可能有软件时钟到期了),就一直运行3~7,否则跳转至8

3.计算得到tv1 的索引,该索引指明当前到期的软件时钟所在tv1 中的链

表(结构参见3.2节),代码:

int index = base->timer_jiffies & TVR_MASK;

1.调用cascade 函数对软件时钟进行必要的调整(稍后会介绍调整的过程)

2.使得timer_jiffies 的数值增加1

3.取出相应的软件时钟链表

4.遍历该链表,对每个元素进行如下操作:

a.设置当前软件时钟为base 中正在运行的软件时钟(即保存当前软件时钟到base-> running_timer 成员中)

b.将当前软件时钟从链表中删除,即卸载该软件时钟

c.释放锁,执行软件时钟处理程序

d.再次获得锁

1.设置当前base 中不存在正在运行的软件时钟

2.释放锁

3.3.3 软件时钟调整过程

函数cascade 用于调整软件时钟(这个调整过程是指:将马上就要到期的软件时钟从其所在的链表中删除,重新计算到期时间的相对值(到期时间- timer_jiffies ),然后根据该值重新插入到base 中)。注意到在软件时钟处理过程中,每次都是从tv1 中取出一个链表进行处理,而不是从tv2~tv5 中取,所以对软件时钟就要进行必要的调整。

在讲解cascade 函数之前,再从直观上理解下为什么需要进行调整。所有软件时钟都是按照其到期时间的相对值(相对于timer_jiffies )被调加到base 中的。但是timer_jiffies 的数值都会在处理中增加1(如3.3.2节所示),也就是说这个相对值会随着处理发生变化,当这个相对值小于等于256时,就要将软件时钟从tv2~tv5 中转移到tv1 中(tv1 中保存着下256个tick 内到期的所有软件时钟)。

函数cascade 的实现如清单3-10

清单3-10 cascade 函数

static int cascade(struct tvec_base *base, struct tvec *tv, int

index)

{

struct timer_list *timer, *tmp;

struct list_head tv_list;

list_replace_init(tv->vec + index, &tv_list);

list_for_each_entry_safe(timer, tmp, &tv_list, entry) {

……

internal_add_timer(base, timer);

}

return index;

}

该函数根据索引,取出相应的tv (tv2~tv5 )中的链表,然后遍历链表每一个元素。按照其到期时间重新将软件时钟加入到软件时钟的base 中。该函数返回tv 中被调整的链表索引值(参见图3-1)。

财务管理内控制度审计方案

财务管理内控制度审计方案 为规范企业财务管理工作,推进企业财务管理内部控制制度的建设和执行,按照公司****年审计工作计划,对****开展财务管理内控制度审计。为确保审计有效顺利开展,制定本方案。 一、审计目的 通过对财务管理内控制度的建立和执行情况进行审计,查找财务管理中的薄弱环节及存在问题,促进各单位进一步加强和规范企业财务管理,加强内部会计监督,从而提高企业会计信息质量,保护资产的安全完整,确保经营目标的全面完成。 二、审计范围 本次审计范围为20**~20**年财务管理内部控制制度的建设和执行情况,根据工作需要可延伸审计其他年度。 三、审计依据 1.《中华人民共和国审计法》 2.《审计署关于内部审计工作的规定》 3.《内部审计基本准则》 四、审计内容及重点 在了解企业财务管理现状的基础上,重点关注预算管理、

成本管理、资金管理、资产管理、对外投资、融资等方面的内控制度的建立及执行情况。 (一)预算管理 1.预算管理制度建设:企业是否制定预算管理的相关制度,制定的管理制度是否科学、可行,是否与上级管理部门的预算管理方面的要求一致; 2.预算编制和审核:预算编制是否遵循“自上而下、自下而上、上下结合、分级编制、逐级审批”的程序;预算是否涵盖被审计单位的所有经营业务活动,重点关注除电费收入外的其他收入是否纳入预算管理;预算审核是否有专业人员的参加;预算项目是否细化,是否存在预算项目过粗,不利于执行和考核的情况(如其他费用支出过大);是否根据年度预算编制月份预算或季度预算;预算审核时是否考虑公司发展目标和资产经营目标。 3.预算执行和调整:经审核批准的预算是否进一步分解细化到各部门(单位),并形成预算责任体系;是否按照预算目标,并结合实际业务活动逐月编制月度资金预算;是否建立预算管理台账;是否按资金预算严格控制各项费用支出,预算外支出是否按照制度规定履行相应的审批程序。预算调整是否经过上级预算管理部门审批。 4.预算分析和考核:是否定期召开预算分析会,对月度

财务管理制度与内部控制制度

第二篇财务管理制度 第一章总则 第一条为了贯彻执行“企业财务通则”、“企业会计准则”使会计工作法规化、规化、制度化,建立科学的会计程序,根据“中华人民国会计法”及财政部制定的“会计基础工作规”制定本制度。 第二章财务人员的岗位职责 第一条建立会计人员职业道德规,是会计人员强化道德约束的措施,会计人员在会计工作中应遵守职业道德,热爱本职工作,努力钻研业务,紧跟会计改革步伐,使自己的知识、技能适应所从事工作的要求。 第二条会计人员必须执行国家的方针、政策、法律、法规和国家统一的会计制度,认真履行“会计法”赋予的职责、权限,办理会计事务客观公正,实事。 第三条会计人员要对本单位的经济活动进行严格的核算、监督,保守本单位的商业秘密,不能私自泄露单位的会计信息。 第二项财务负责人的权责 第一条财务负责人是财务工作的管理者,对会计工作人员有领导责任,应领导会计机构的全体人员执行“会计法”,带头学法、守法、执法,做到以身作则,有令必行,有禁必止。 第二条财务负责人应保障会计人员依法行使职权,支持、配合会计人员办理会计手续,保证会计人员职权不受侵犯,保证会计资料合法、真实、准确、完整。

第三条公司法人代表对公司财务具有监督、检查的权利。对违反《会计法》等相关法律和规章制度事情,有权制止。 第四项会计的职责 第一条会计人员必须按财政部制定的“会计制度”的设置会计科目,设置总帐、明细帐、附加帐,组成系统科学的帐薄体系,保证合理地反映单位的经营活动和财务活动。 第二条会计人员对发生的每一项经济业务必须取得完整的原始凭证,并根据审核无误的原始凭证填制记帐凭证。对不合法的原如应拒绝受理。 第三条会计人员根据记帐凭证登记帐薄,做到容真实、数字准确、帐帐相符、帐实相符。 第四条会计人员必须按会计资料进行经营活动的核算;进行准确的成本核算;进行进、销项税金及其他税金的正确核算。帮助领导做好经营决策工作,按时向税务机关进行纳税申报,并准时送财务报表,做到容完整,数字准确、真实。保证会计信息质量。 第五条会计人员负责向董事会及全体股东,按董事会决议规定报告单位财务状况,参与单位经营和经营成果的预测及决策。 第五项出纳的职责 第六条严格遵守国家现金管理制度,做好现金管理工作,具体办理现金收付手续,报销时要认真审查原始凭证,凡不符合规定和手续不全的一律拒绝办理现金收付手续,严格把好关。 第七条不得从本单位现金收入中直接支付现金,特殊情况报开户银行审批,不能以白条或不符合财务会计制度的凭证顶替库存现金,借款报销必须由财务负责人与项目负责人签字才能办理现金支付手续。 第八条建立健全现金日记帐,逐笔记载现金收会,帐目日清月结。 第九条建立部牵制制度。负责保管现金、转帐等空白凭证,财务章由会

LINUX 内核的几种锁介绍

spinlock(自旋锁)、 mutex(互斥量)、 semaphore(信号量)、 critical section(临界区) 的作用与区别 Mutex是一把钥匙,一个人拿了就可进入一个房间,出来的时候把钥匙交给队列的第一个。一般的用法是用于串行化对critical section代码的访问,保证这段代码不会被并行的运行。 Semaphore是一件可以容纳N人的房间,如果人不满就可以进去,如果人满了,就要等待有人出来。对于N=1的情况,称为binary semaphore。一般的用法是,用于限制对于某一资源的同时访问。 Binary semaphore与Mutex的差异: 在有的系统中Binary semaphore与Mutex是没有差异的。在有的系统上,主要的差异是mutex一定要由获得锁的进程来释放。而semaphore可以由其它进程释放(这时的semaphore实际就是个原子的变量,大家可以加或减),因此semaphore 可以用于进程间同步。Semaphore的同步功能是所有系统都支持的,而Mutex能否由其他进程释放则未定,因此建议mutex只用于保护critical section。而semaphore则用于保护某变量,或者同步。 另一个概念是spin lock,这是一个内核态概念。spin lock与semaphore的主要区别是spin lock是busy waiting,而semaphore是sleep。对于可以sleep 的进程来说,busy waiting当然没有意义。对于单CPU的系统,busy waiting 当然更没意义(没有CPU可以释放锁)。因此,只有多CPU的内核态非进程空间,

【IT专家】linux多线程及信号处理

本文由我司收集整编,推荐下载,如有疑问,请与我司联系 linux多线程及信号处理 linux多线程及信号处理Linux 多线程应用中如何编写安全的信号处理函数hi.baidu/yelangdefendou/blog/item/827984efd3af7cd9b21cb1df.html Signal Handling Use reentrant functions for safer signal handling linux信号种类1、可靠信号和不可靠信号“不可靠信号” Linux信号机制基本上是从Unix系统中继承过来的。早期Unix系统中的信号机制比较简单和原始,后来在实践中暴露出一些问题,因此,把那些建立在早期机制上的信号叫做”不可靠信号”,信号值小于SIGRTMIN(Red hat 7.2中,SIGRTMIN=32,SIGRTMAX=63)的信号都是不可靠信号。这就是”不可靠信号”的来源。他的主要问题是:? 进程每次处理信号后,就将对信号的响应配置为默认动作。在某些情况下,将导致对信号的错误处理;因此,用户假如不希望这样的操作,那么就要在信号处理函数结尾再一次调用signal(),重新安装该信号。? 信号可能丢失,后面将对此周详阐述。因此,早期unix下的不可靠信号主要指的是进程可能对信号做出错误的反应连同信号可能丢失。Linux支持不可靠信号,但是对不可靠信号机制做了改进:在调用完信号处理函数后,不必重新调用该信号的安装函数(信号安装函数是在可靠机制上的实现)。因此,Linux下的不可靠信号问题主要指的是信号可能丢失。“可靠信号” 随着时间的发展,实践证实了有必要对信号的原始机制加以改进和扩充。因此,后来出现的各种Unix版本分别在这方面进行了研究,力图实现”可靠信号”。由于原来定义的信号已有许多应用,不好再做改变,最终只好又新增加了一些信号,并在一开始就把他们定义为可靠信号,这些信号支持排队,不会丢失。同时,信号的发送和安装也出现了新版本:信号发送函数sigqueue()及信号安装函数sigaction()。POSIX.4对可靠信号机制做了标准化。但是,POSIX只对可靠信号机制应具备的功能连同信号机制的对外接口做了标准化,对信号机制的实现没有作具体的规定。信号值位于SIGRTMIN和SIGRTMAX之间的信号都是可靠信号,可靠信号克服了信号可能丢失的问题。Linux在支持新版本的信号安装函数sigation()连同信号发送函数sigqueue()的同时,仍然支持早期的signal()信号安装函数,支持信号发送函数kill()。注:不

事业单位预算管理内部控制制度

开远市渔业管理站预算管理内部控制制度 根据内部控制管理工作的要求,结合相关规定制度本单位如下制度:第一章预算领域机构职责及内容 第一条为了进一步加强行政事业单位预算管理,健全预算制度,杜绝违纪违法行为,从源头上预防腐败,促进党风廉政建设和我市经济有序健康发展,根据《中华人民共和国预算法》、《中华人民共和国会计法》、《中华人民共和国政府采购法》和财政部《行政单位预算规则》、《事业单位预算规则》等有关法律、法规定,并结合我单位实际制定本规定。 第二条事业单位预算管理,是单位管理的重要组成部分,是规范单位经济活动和社会经济秩序的重要手段。本单位的预算管理必须符合国家有关法律、法规和预算规章制度。建立健全单位各项预算管理制度,完善内部监控制度,防止财产、资金流失、浪费或被贪污、挪用。 第三条单位预算管理由单位预算管理决策机构、管理机构、执行机构、监督机构分别负责预算各阶段相关工作。 第四条单位领导班子组成预算管理决策机构负责预算制定,单位会计、出纳组成预算管理、执行机构,负责预算管理执行工作,单位纪检部门组成监督机构,负责预算监督审计预算监督工作。 第二章预算编审、批复、执行、调整 第五条单位应当按照规定编制年度部门预算,报同级财政部门按法定程序审核、报批。部门预算由收入预算、支出预算组成。 第六条单位依法取得的各项收入,包括:行政事业性收费、罚款和罚没收入、上级补助收入、附属单位上缴收入、捐赠、其他收入等必须列入收入预算,不得隐瞒或少列。单位取得的各项收入(包括实物),要据实及时入账,不得隐瞒,更不得另设账户或私设“小金库”。按规定纳入财政专户或财政预算内管理的预算外资金或罚没款,要按规定实行收支两条线管理,并及时缴入国库或财政专户,不得滞留在单位坐支、挪用。 第七条单位编制的支出预算,应当保证本部门履行基本职能所需要的人员经费和公用经费,对其他弹性支出和专项支出应当严格控制。 支出预算包括:人员支出、日常公用支出、对个人和家庭的补助支出、专项支出。人员支出预算的编制必须严格按照国家政策规定和标准,逐项核定,没有政策规定的项目,不得列入预算。日常公用支出预算的编制应本着节约、从俭的原则编报。对个人和家庭的补助支出预算的编制应严格按照国

xxx单位内部控制基本制度(试行)

xxx单位内部控制基本制度(试行) 第一章总则 第一条为贯彻落实依法治国基本方略,建设法治机关,提高内部管理水平,规范内部控制,有效防控廉政风险和业务风险,根据有关法律、行政法规和《行政事业单位内部控制规范(试行)》,按照分事行权、分岗设权、分级授权,强化流程控制、依法合规运行的要求,结合我委工作实际,制定本制度。 第二条本制度所称内部控制,是指为实现控制目标,通过查找、梳理、评估xx业务工作中的各类风险,制定、完善并有效实施一系列制度、流程、程序和方法,对xx业务工作风险进行事前防范、事中控制、事后监督和纠正的动态过程及机制。 第三条本制度适用于市本级xx业务中政策法规管理、预算业务管理、收支业务管理、政府采购业务管理、资产管理、建设项目管理、合同管理、会计业务管理、机关决策运转及信息系统管理和人事管理等各项工作的内部控制活动。 第四条xx工作内部控制目标: (一)合法性。各项政策与规定制度符合国家有关法律法规并得到有效贯彻执行,各项xx业务活动遵循法定程序与工作纪律。 (二)安全性。各项xx工作在预定流程中运行,确保有章可循、有规可依,防范舞弊和预防腐败,最大限度保障资

金和干部安全。 (三)效率性。提高工作质量和效率,有效履行xx职能,贯彻落实好党中央、国务院、省委、省政府和市委、市政府的决策部署。 (四)效益性。科学配臵xx资源,提高xx资金的有效性,实现支出效益的最大化。 第五条内部控制主要因素: (一)内部环境。包括管理结构、机构设臵及职权分配、内部监督检查、干部队伍建设、机关文化等。 (二)风险评估。及时识别分析工作中与实现内部控制目标相关的内部风险和外部风险,对风险进行评估、分级,合理确定风险应对策略。 (三)控制活动。根据风险评估结果,采取相应的控制措施,将风险控制在可承受范围之内。 (四)信息沟通。加强信息系统建设,及时准确全面地收集、处理、传递与内部控制相关的信息,确保信息在委内以及我委与外部之间进行有效沟通和应用。 (五)内部监督。对内部控制机制的建立和运行情况进行监督检查,评价内部控制的有效性,发现内部控制设计和运行的缺陷并督促改进。 第六条建立和实施内部控制,应遵循以下原则: (一)全面性原则。内部控制贯穿于决策、执行、监督、改进和反馈全过程,贯穿各项xx工作流程和各个环节,覆盖所有科室和岗位,并由全体干部职工参与。任何决策或业务均应做到过程留痕、责任可追溯。

linux signal()函数

当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。根据信号的默认处理规则SIGPIPE信号的默认执行动作是terminate(终止、退出), 所以client会退出。 若不想客户端退出可以把SIGPIPE设为SIG_IGN 如: signal(SIGPIPE,SIG_IGN); 这时SIGPIPE交给了系统处理。 服务器采用了fork的话,要收集垃圾进程,防止僵死进程的产生,可以这样处理: signal(SIGCHLD,SIG_IGN);交给系统init去回收。 这里子进程就不会产生僵死进程了。 signal(SIGHUP, SIG_IGN); signal信号函数,第一个参数表示需要处理的信号值(SIGHUP),第二个参数为处理函数或者是一个表示,这里,SIG_IGN表示忽略SIGHUP那个注册的信号。 SIGHUP和控制台操作有关,当控制台被关闭时系统会向拥有控制台sessionID的所有进程发送HUP信号,默认HUP信号的action是exit,如果远程登陆启动某个服务进程并在程序运行时关闭连接的话会导致服务进程退出,所以一般服务进程都会用nohup工具启动或写成一个daemon。 unix中进程组织结构为session 包含一个前台进程组及一个或多个后台进程组,一个进程组包含多个进程。 一个session可能会有一个session首进程,而一个session首进程可能会有一个控制终端。 一个进程组可能会有一个进程组首进程。进程组首进程的进程ID与该进程组ID相等。 这儿是可能会有,在一定情况之下是没有的。 与终端交互的进程是前台进程,否则便是后台进程 SIGHUP会在以下3种情况下被发送给相应的进程: 1、终端关闭时,该信号被发送到session首进程以及作为job提交的进程(即用&符号提交的进程)

预算编制内部控制制度

XXXX中心小学预算编制内部控制制度 第一章总则 第一条:为有效发挥预算的规范和监督职能,保障和促进学校教育教学的发展,根据《中华人民共和国预算法》和邻水县财政部门的总体要求,结合我校实际情况,制定本制度。 第二条:预算编制原则 1、预算编制必须坚持“量入为出、收支平衡”原则。预算编制既要考虑学校事业发展和建设的需要,又要考虑到学校财力可能,不搞赤字预算。 2、预算编制必须坚持“收支两条线”原则。收入预算要坚持积极稳妥原则,既要考虑经费来源渠道的增加和收入的增长,又要考虑实现收入增长的可能性。支出预算要坚持统筹兼顾、保证重点、节能降耗等原则,在确保人员教育教正常运行的前提下,合理安排校园建设、发展支出。 3、预算编制要坚持“归口管理”原则。学校按部门分项目统筹经费分配与管理,最后由财会室汇总各部门项目费用,编制本年度经费预算,经专题会议研究,经过职工大会批准后申报执行。 第四条:预算包括收入预算和支出预算。 第五条:严格执行不相容职务相分离原则。预算编制与预算审批职务;预算审批与预算执行职务;预算执行与预算考核职务分离。 第二章分工与授权 第六条:预算编制管理组织机构 组织机构为非常设机构由总务室牵头发起,成员由行政校长、财务人员、相关业务人员及教师代表构成。预算业务管理工作机构设在财会室,工作人员除财会人员外,政府采购、资产管理、基建管理、人事管理等部门的工作人员也应当参与其中。 第七条:预算编制组织机构分工 领导小组组负责学校预算编制的原则、方法、规范及编制工作;总务室要发挥好预算编报工作的牵头组织作用,确保按时规范完成预算编报工作;领导小组成员负责学校预算的编制、修订工作。财会室负责预算的审核、汇总、修正工作及决算的编制与申报工作。

内部控制制度处理准则

內部控制制度處理準則 第一章總則 第一條為協助上市上櫃公司建立良好之公司治理制度,並促進證券市場健全發展,臺灣證券交易所股份有限公司(以下簡稱證券交易所)及財團法人中華民國證券櫃檯買賣中心(以下簡稱櫃檯買賣中心)爰共同制定本守則,以資遵循。 上市上櫃公司宜參照本守則相關規定訂定公司本身之公司治理守則。 第二條上市上櫃公司建立公司治理制度,除應遵守法令及章程之規定,暨與證券交易所或櫃檯買賣中心所簽訂之契約及相關規範事項外,應依下列原則為之: 一.保障股東權益。 二.強化董事會職能。 三.發揮監察人功能。 四.尊重利害關係人權益。 五.提昇資訊透明度。 第三條上市上櫃公司應依公開發行公司建立內部控制制度處理準則之規定,考量本公司及子公司整體之營運活動,建立有效之內部控制制度,並應隨時檢討,以因應公司內外在環境之變遷,俾確保該制度之設計及執行持續有效。上市上櫃公司除應確實辦理內部控制制度之自行檢查作業外,董事會及管理階層應至

少每年檢討各部門自行檢查結果及稽核單位之稽核報告,監察人並應關注及監督之。 上市上櫃公司管理階層應重視內部稽核單位與人員,賦予充分權限,促其確實檢查.評估內部控制制度之缺失及衡量營運之效率,以確保該制度得以持續有效實施,並協助董事會及管理階層確實履行其責任,進而落實公司治理制度。 第二章保障股東權益 第一節鼓勵股東參與公司治理 第四條上市上櫃公司執行公司治理制度應以保障股東權益為最大目標,並公平對待所有股東。 上市上櫃公司應建立能確保股東對公司重大事項享有充分知悉.參與及決定等權利之公司治理制度。 第五條上市上櫃公司應依照公司法及相關法令之規定召集股東會,並制定完備之議事規則,對於應經由股東會決議之事項,須按議事規則確實執行。上市上櫃公司之股東會決議內容應符合法令及公司章程規定。 第六條上市上櫃公司董事會應妥善安排股東會議題及程序,股東會應就各議題之進行酌予合理之討論時間,並給予股東適當之發言機會。董事會所召集之股東會,宜有董事會過半數董事親自出席。 第七條上市上櫃公司應鼓勵股東參與公司治理,並使股東會在合法.有效.安全之前提下召開。上市上櫃公司應透過各種方式

Linux中直接IO机制的介绍

Linux 中直接 I/O 机制的介绍https://www.doczj.com/doc/ce4496775.html,/developerworks/cn/linux/l-cn-...

https://www.doczj.com/doc/ce4496775.html,/developerworks/cn/linux/l-cn-...

当应用程序需要直接访问文件而不经过操作系统页高速缓冲存储器的时候,它打开文件的时候需要指定 O_DIRECT 标识符。 操作系统内核中处理 open() 系统调用的内核函数是 sys_open(),sys_open() 会调用 do_sys_open() 去处理主要的打开操作。它主要做了三件事情:首先,它调用 getname() 从进程地址空间中读取文件的路径名;接着,do_sys_open() 调用 get_unused_fd() 从进程的文件表中找到一个空闲的文件表指针,相应的新文件描述符就存放在本地变量 fd 中;之后,函数 do_?lp_open() 会根据传入的参数去执行相应的打开操作。清单 1 列出了操作系统内核中处理 open() 系统调用的一个主要函数关系图。 清单 1. 主要调用函数关系图 sys_open() |-----do_sys_open() |---------getname() |---------get_unused_fd() |---------do_filp_open() |--------nameidata_to_filp() |----------__dentry_open() 函数 do_?ip_open() 在执行的过程中会调用函数 nameidata_to_?lp(),而 nameidata_to_?lp() 最终会调用 __dentry_open()函数,若进程指定了 O_DIRECT 标识符,则该函数会检查直接 I./O 操作是否可以作用于该文件。清单 2 列出了 __dentry_open()函数中与直接 I/O 操作相关的代码。 清单 2. 函数 dentry_open() 中与直接 I/O 相关的代码 if (f->f_flags & O_DIRECT) { if (!f->f_mapping->a_ops || ((!f->f_mapping->a_ops->direct_IO) && (!f->f_mapping->a_ops->get_xip_page))) { fput(f); f = ERR_PTR(-EINVAL); } } 当文件打开时指定了 O_DIRECT 标识符,那么操作系统就会知道接下来对文件的读或者写操作都是要使用直接 I/O 方式的。 下边我们来看一下当进程通过 read() 系统调用读取一个已经设置了 O_DIRECT 标识符的文件的时候,系统都做了哪些处理。函数read() 的原型如下所示: ssize_t read(int feledes, void *buff, size_t nbytes) ; 操作系统中处理 read() 函数的入口函数是 sys_read(),其主要的调用函数关系图如下清单 3 所示: 清单 3. 主调用函数关系图 sys_read() |-----vfs_read() |----generic_file_read() |----generic_file_aio_read() |--------- generic_file_direct_IO()

内控管理预算管理制度

预算管理制度 为进一步加强财务管理,健全财务制度,杜绝违纪违法行为,推进财务管理制度化、规范化,根据《中华人民共和国预算法》和财政部《行政单位财务规则》等有关法律、法规规定,并结合实际,特制定本制度。 一、实事求是、量入为出。将各项收入全部纳入收入预算,做到不遗漏、不隐瞒。包括:财政拨款收入、罚没款收入、上级补助收入,其他收入等必须列入收入预算,不得隐瞒或少列。同时各项开支严格执行制度和标准,防止出现财务收支的盲目性。 二、区分轻重缓急,优先安排急需处理的事关全局的支出事项。既要体现实际需要,又要考虑财力实际,确保收支平衡。 三、统筹兼顾,不能出现赤字预算和寅吃卯粮的现象,做到当年收支保持平衡并留有一定的结余;同时,在确保重点支出的情况下,统筹兼顾,发挥资金的最大效益。 四、发挥职能效应,保证经费,履行基本职能所需要的人员经费和公用经费,对其他弹性支出和专项支出应当严格控 制。 支出预算包括:人员支出、日常公用支出、对个人和家庭的补助支出、专项支出。人员支出预算的编制必须严格按照国家政策规定和标准,逐项核定,没有政策规定的项目,不得列入预算。日常公用支出预算的编制应本着节约、从俭的原则编报。对个人和家庭的补助支出预算的编制应严格按照国家政策规定 和标准,逐项核定。专项支出预算的编制应紧密结合单位当年主要职责任务、工作目标及事业发展设想,并充分考虑财政的承受能力,本着实事求是:从严从紧、区别轻重缓急,急事优先的原则按序安排支出事项。 五、建立健全支出内部控制制度和内部稽核、审批、审查制度,完善内部支出管理,强化内部约束,不断降低行政事业单位运行成本。各项支出应当符合国家的现行规定,不得擅自提

内控管理制度

内部控制管理制度 第一章总则 第一条为规范和加强公司内部控制,提高公司经营管理水平和风险防范能力,促进公司可持续发展,特制定本制度。 第二条本制度所称内部控制,是指由管理层以及全体员工实施的、旨在实现控制目标的过程。 第三条内部控制的目标是: (一)合理保证公司经营管理合法合规。 (二)保障公司的资产安全。 (三)保证公司财务报表及相关信息真实完整。 (四)提高经营效率和效果。 (五)促进公司实现发展战略。 第四条公司建立与实施内部控制制度,应遵循下列原则: (一)全面性原则。内部控制贯穿决策、执行和监督全过程,覆盖公司及各种业务和事项。 (二)重要性原则。内部控制在全面控制的基础上,关注重要业务事项和高风险领域。 (三)制衡性原则。内部控制在治理结构、机构设置及权责分配、业务流程等方面形成相互制约、相互监督,同时兼顾运营效率。 (四)适应性原则。内部控制与公司经营规模、业务范围、竞争状况和风险水平等相适应,并随着情况的变化及时加以调整。 (五)成本效益原则。内部控制权衡实施成本与预期效益,以适当

的成本实现有效控制。 第五条公司建立与实施有效的内部控制,包括下列基本要素: (一)目标设定,是管理层根据公司的风险偏好设定战略目标。 (二)内部环境,是指公司实施内部控制的基础,包括治理结构、机构设置及权责分配、内部审计、人力资源政策、公司文化等。 (三)风险确认,是指管理层确认影响公司目标实现的内部和外部风险因素。 (四)风险评估,是指公司及时识别、系统分析经营活动中与实现内部控制目标相关的风险,合理确定风险应对策略。 (五)风险管理策略选择,是指管理层根据公司风险承受能力和风险偏好选择风险管理策略。 (六)控制活动,控制活动是指公司根据风险评估结果,采用相应的控制措施,将风险控制在可承受度之内。 (七)信息与沟通,信息与沟通是指公司及时、准确地收集、传递与内部控制相关的信息,确保信息在公司内部、公司与外部之间进行有效沟通。 (八)内部监督,是指公司对内部控制建立与实施情况进行监督检查,评价内部控制的有效性,发现内部控制缺陷,应当及时加以改进。 第六条公司内部控制活动涵盖公司所有的营运环节,包括但不限于:销售及收款、采购和费用及付款、固定资产管理、预算管理、资金管理、重大投资管理、财务报告、成本和费用控制、信息披露、人力资源管理和系统信息管理等。 第七条公司内控制度除涵盖对经营活动各环节的控制外,还包括贯穿于经营活动各环节之中的各项管理制度,包括但不限于:印章使用管理、票据领用管理、预算管理、资产管理、质量管理、职务授权管理、定期沟通制度、信息披露管理制度等。

实验四 Linux进程互斥

实验四 Linux进程互斥 一、实验目的 熟悉Linux下信号量机制,能够使用信号量实现在并发进程间的互斥和同步。 二、实验题目 使用共享存储区机制,使多个并发进程分别模拟生产者-消费者模式同步关系、临界资源的互斥访问关系,使用信号量机制实现相应的同步和互斥。 三、背景材料 (一)需要用到的系统调用 实验可能需要用到的主要系统调用和库函数在下面列出,详细的使用方法说明通过“man 2 系统调用名”或者“man 3 函数名”命令获取。 fork() 创建一个子进程,通过返回值区分是在父进程还是子进程中执行; wait() 等待子进程执行完成; shmget() 建立一个共享存储区; shmctl() 操纵一个共享存储区; s hmat() 把一个共享存储区附接到进程内存空间; shmdt() 把一个已经附接的共享存储区从进程内存空间断开; semget() 建立一个信号量集; semctl() 操纵一个信号量集,包括赋初值; semop() 对信号量集进行wait和signal操作; signal() 设置对信号的处理方式或处理过程。 (二)模拟生产者-消费者的示例程序 本示例主要体现进程间的直接制约关系,由于使用共享存储区,也存在间接制约关系。进程分为服务进程和客户进程,服务进程只有一个,作为消费者,在每次客户进程改变共享存储区内容时显示其数值。各客户进程作为生产者,如果共享存储区内容已经显示(被消费),可以接收用户从键盘输入的整数,放在共享存储区。 编译后执行,第一个进程实例将作为服务进程,提示: ACT CONSUMER!!! To end, try Ctrl+C or use kill. 服务进程一直循环执行,直到用户按Ctrl+C终止执行,或使用kill命令杀死服务进程。 其他进程实例作为客户进程,提示: Act as producer. To end, input 0 when prompted. 客户进程一直循环执行,直到用户输入0。 示例程序代码如下: #include #include #include #include #include #include #include #include

内部控制制度-全面预算

内部控制制度 ——全面预算 第一章总则 第一条为了加强某某公司(以下简称“公司”)对预算的内部控制,规范预算编制、审批、执行、分析与考核,提高预算的科学性和严肃性,促进实现预算目标,根据国家有关法律法规和《企业内部控制基本规范》,制定本制度。 第二条本制度所称预算,是指公司结合整体目标及资源调配能力,经过合理预测、综合计算和全面平衡,对当年或者超过一个年度的生产经营和财务事项进行相关额度、经费的计划和安排的过程。公司预算一般包括经营预算、资本预算和财务预算。 第三条公司在完成预算管理活动过程中,至少应关注涉及预算的下列风险:(一)预算体系不健全,岗位职责分工不合理,可能造成公司资源浪费和管理效率低下。 (二)预算管理未经适当审批或超越授权审批,可能因重大差错、舞弊、欺诈而导致损失。 (三)预算目标不合理,预算项目不完整,预算标准不科学,预算编制程序不规范,预算分解和预算调整不合理,可能造成公司预算管理体系缺乏科学性和准确性。 (四)预算的下达和执行不力,可能造成预算失去其应有的权威性和严肃性。 (五)预算分析不正确,预算监控和预算考核不力,对考核结果的奖惩不公平、不合理,可能造成预算管理流于形式。 第四条公司应建立预算管理体系,明确预算编制、审批、执行、分析、考核等各部门、各环节的职责任务、工作程序和具体要求。 公司在建立与实施预算内部控制过程中,至少应强化对下列关键方面或关键环节的控制: (一)职责分工、权限范围和审批程序应明确规范,机构设置和人员配备应科学合理; (二)预算编制、执行、调整、分析、考核的控制流程应清晰严密,对预算

编制方法、审批程序、预算执行情况检查、预算调整、预算执行结果的分析考核等应有明确的规定。 第二章岗位分工与授权批准 第五条公司应建立预算工作岗位责任制,明确相关部门和岗位的职责、权限,确保预算工作中的不相容岗位相互分离、制约和监督。 预算工作不相容岗位一般包括: (一)预算编制(含预算调整)与预算审批。 (二)预算审批与预算执行。 (三)预算执行与预算考核。 第六条公司应建立预算工作组织领导与运行体制,明确公司最高权力机构、决策机构、预算管理部门及各预算执行单位的职责权限、授权批准程序和工作协调机制。 股东大会、董事会负责审批公司年度预算方案。 公司总经理室负责制订公司年度预算方案,预算组织领导工作。 公司财会部门具体负责预算编制、管理和指导工作。 公司内部相关业务部门的主要负责人应参与公司预算编制、管理工作。 第七条公司总经理室主要负责拟订预算目标和预算政策;制定预算管理的具体措施和办法;组织编制、审议、平衡年度等预算草案;组织下达经批准的年度预算等;协调、解决预算编制和执行中的具体问题;考核预算执行情况,督促完成预算目标。 第八条公司内部采购、生产、销售、投资、筹资、项目管理、人力资源、市场营销等业务部门和所属分支机构在公司总经理室的领导下,具体负责本部门、本机构业务预算的编制、执行、控制、分析等工作,并配合总经理室做好公司总预算的综合平衡、控制、分析、考核等工作。 第九条公司所属子公司在上级公司预算管理部门指导下,负责本公司预算的编制、执行、控制和分析工作,并接受上级公司的检查和考核。所属公司负责人对本公司预算的执行结果负责。 第十条公司应制定预算工作流程,明确预算编制、执行、调整、分析与考核等各环节的控制要求,并设置相应的记录或凭证,如实记载各环节工作的开展

内部控制手册总则制度格式

一、前言 1 编制《内部控制手册》的背景 为规范中国石油化工股份有限公司(以下简称“股份公司”)的管理, 贯彻《中华人民共和国公司法》、《中华人民共和国证券法》、《中华人 民共和国会计法》以及其他有关法律、法规,满足国内外资本市场对 上市公司的监管要求,股份公司特制定《内部控制手册》,作为建立、 执行、评价及验证内部控制的依据。 完整的内部控制体系和完善的内部控制制度,是约束、规范 企业管理行为的准则,是减少风险的重大措施。实施内部控 制可以及时发现和纠正各种错弊及不法行为,有利于保证资 产安全、完整,保证经营成果与财务状况真实、可靠。其必 要性表现为: 一是建立现代企业制度,完善法人治理结构,实现经营机制 的转换,加强企业管理,提高企业经营业绩,改善企业财务 状况。 二是贯彻我国有关法律法规,遵循美国《萨班斯-奥克斯利 法案》等国内外资本市场监管需求,提高会计信息质量。 三是积极参与竞争、努力降低风险。随着市场竞争日趋激烈和信息技 术高度发展,以及全球经济一体化的进程加速,股份公司所面临的风 险也逐渐加大。建立健全有效的内部控制制度,是防范风险、提高经 营管理效率和效果的重要措施。 四是建立统一规范的内部控制制度,使股份公司各项规章制度成为系 统性、可操作性和包容性很强的内部管理制度,更为有效地体现股份 公司管理理念。

2 《内部控制手册》遵循的基本原则 2.1 合规性原则 合规性是指企业内部控制制度必须符合国家的法律、法规和政策;符 合股份公司上市地(上海、香港、纽约、伦敦)证券监管机构有关上 市公司的法律、法规和要求。 2.2 全面性与系统性原则 《内部控制手册》涉及股份公司经营活动的各个方面,其内部监督和 控制贯穿于经营管理活动的全过程并涉及全体员工。股份公司的每一 个员工既是内部控制的主体,又是内部控制的客体;既要对其负责的 作业实施控制,又要受到其他人员或制度的监督与制约。 《内部控制手册》使股份公司内部各部门、各岗位形成较为系统的既 互相制约又具有纵横交错关系的统一整体,确保各部门和各岗位均能 按特定的目标相互协调地发挥作用,最终实现股份公司内部控制的总 体目标。 2.3 内部牵制及不相容原则 内部牵制是指在部门与部门、员工与员工以及各岗位之间所建立的互 相验证、互相制约的关系,属于企业内部控制制度一个重要组成部分。 其主要特征是将有关责任进行分配,使单独的一个人或一个部门对任 何一项或多项经济业务活动没有完全的处理权,必须经过不相容的其 他部门或人员的验证、核对和制约。 2.4 权责明确、奖惩结合原则 根据各部门和岗位的职能与性质,明确各部门及人员应承担的责任并 赋予相应的权限,制定操作规则和处理程序,确定追究、查处责任的

linux通讯

线程+定时实现linux下的Qt串口编程 2010-06-26 10:49 转: 线程+定时实现linux下的Qt串口编程 作者:lizzy115 时间:2010,5,14 说明:本设计采用的是线程+定时实现linux下的Qt串口编程,而非网上资料非常多的Qt编写串口通信程序全程图文讲解系列,因为Qt编写串口通信程序全程图文讲解系列是很好实现,那只是在windows下面的,可是在linux 下面实现串口的通信并非如此,原因在于QextSerialBase::EventDriven跟QextSerialBase::Polling这两个事件的区别,EventDriven属于异步,Polling 属于同步,在windows下面使用的是EventDriven很容易实现,只要有数据就会触发一个串口事件,网上说linux下面需要的是Polling,可是还是不行的,只要串口有数据的时候他会在QByteArray temp = myCom->readAll(); 这句一直读取数据,没能退出,直到断掉串口的时候才能把接受到的串口数据通过 ui->textBrowser->insertPlainText(temp);打印在界面上,一直没能解决这个问题,所以只好采用线程+定时实现linux下的Qt串口编程进行设计。 一、安装环境: 系统平台:Ubuntu-8.04,内核2.6.24-27-generic,图形界面 二、软件需求及下地地址: Qt版本 qt-linux-SDK-4.6.2 注意:此处使用的是qt-linux-SDK-4.6.2版本,编译通过了,之后需要把他移植到qt-embedded-linux-opensource-src-4.5.3.tar.gz,通过qte编译后移植到开发板中,采用的测试开发板为Micro2440, 下载地址:略 三、程序编写过程 程序编程流程: 先新建一个工程空白工程,再建立Ui文件,通过designer进行Ui 界面设计,设计完保存,编译生成ui_mainwindow.h头文件,编写线程头文件及线程处理.cpp文件,建立串口处理头文件及 .cpp文件,最后完成main.cpp 文件。

linux基础操作

玩过Linux的人都会知道,Linux中的命令的确是非常多,但是玩过Linux的人也从来不会因为Linux的命令如此之多而烦恼,因为我们只需要掌握我们最常用的命令就可以了。当然你也可以在使用时去找一下man,他会帮你解决不少的问题。然而每个人玩Linux的目的都不同,所以他们常用的命令也就差异非常大,而我主要是用Linux进行C/C++和shell程序编写的,所以常用到的命令可以就会跟一个管理Linux系统的人有所不同。因为不想在使用是总是东查西找,所以在此总结一下,方便一下以后的查看。不多说,下面就说说我最常用的Linux 命令。 1、cd命令 这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径。如: [plain]view plain copy print? 1.cd /root/Docements # 切换到目录/root/Docements 2.cd ./path # 切换到当前目录下的path目录中,?.?表示当前目录 3.cd ../path # 切换到上层目录中的path目录中,?..?表示上一层目录 2、ls命令 这是一个非常有用的查看文件与目录的命令,list之意,它的参数非常多,下面就列出一些我常用的参数吧,如下: [plain]view plain copy print? 1.-l :列出长数据串,包含文件的属性与权限数据等 2.-a :列出全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用) 3.-d :仅列出目录本身,而不是列出目录的文件数据 4.-h :将文件容量以较易读的方式(GB,kB等)列出来 5.-R :连同子目录的内容一起列出(递归列出),等于该目录下的所有文件都会显示出来 注:这些参数也可以组合使用,下面举两个例子: [plain]view plain copy print? 1.ls -l #以长数据串的形式列出当前目录下的数据文件和目录 2.ls -lR #以长数据串的形式列出当前目录下的所有文件 3、grep命令 该命令常用于分析一行的信息,若当中有我们所需要的信息,就将该行显示出来,该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工等等,它的简单语法为 [plain]view plain copy print? 1.grep [-acinv] [--color=auto] '查找字符串' filename 它的常用参数如下: [plain]view plain copy print?

工会内部控制预算管理制度

工会内部控制预算管理制度 工会预算是经一定程序核定的工会经费年度收支计划,是收好、管好、用好工会经费的重要手段,是工会财务管理的重要内容。下面YJBYS小编为大家精心搜集了关于工会内部控制预算的管理,欢迎大家参考借鉴,希望可以帮助到大家! 第一章总则 第一条为了加强预算管理和宏观调控,强化分配和监督职能,保障工会社会职能的履行和工运事业的发展,根据《中华人民共和国工会法》、《中华人民共和国预算法》等法律、法规,结合工会实际,制定本办法。 第二条工会预算是经一定程序核定的工会经费年度收支计划,是收好、管好、用好工会经费的重要手段,是工会财务管理的重要内容。各级工会必须按照本办法办理工会预、决算。 第三条根据“统一领导,分级管理”的工会财务管理体制,工会预算一般分为五级管理,即:全国总工会、省级工会、市级工会、县级工会、基层工会。 预算管理实行下管一级的原则。 建立乡镇(街道)工会的地方,省级以下预算管理级次由省级总工会根据本地实际情况确定后,报全国总工会备案。 经全国总工会批准独立管理经费的中华全国铁路总工会、中国民航工会全国委员会、中国金融工会全国委员会,其预算管理级次由各自产业工会确定后,报全国总工会批准。 第四条县级以上(含县级,下同)工会对独立核算事业单位的补助及企事业单位按规定上缴的收益列入本级预算;未独立核算的事业单位,其收支要全额列入本级预算。 第五条各级工会要认真执行上级工会批准的预算。未经规定程序批准不得变更。 第六条预算年度自公历1月1日起至12月31日止。 第七条预算收支以人民币元为计算单位。 第二章预算管理职权 第八条工会预算包括本级预算和单位预算。本级预算是指各级工会本级次范围内工会经费收支(含所属建立预算管理关系的机关和单位)的总预算。单位预算是指与本级预算有相关经费收支管理关系的工会机关、企事业单位的预算。

内部控制制度建设

内部控制制度建设 1

浅析中国联通内部控制制度建设 林曙光 中国联合网络通信有限公司滨州市分公司人力资源部 256603 摘要: 中国联通作为一家在美国上市的公司率先开展并不断完善了内部控制制度建设,所采取的措施和理念对中国其它企业下一步进行内控体系的搭建和风险管控起到了很好的示范和指导作用。 关键词:联通内控制度风险管控 美国<萨班斯——奥克斯利法案>(SOX法案)的404条款规定:在美上市企业必须保证公司管理层建立和维护内部控制系统及相应控制程序充分有效的责任体系,同时提供管理层最近财务年度对内部控制体系及控制程序有效性的证明及内控机制评价的报告。如此苛刻的404条款几乎成了所有在美上市公司的一道”坎”,中国联通作为在美国、上海和香港同时上市的公司也不例外。为满足萨班斯法案的要求,自年末开始,中国联通着手进行内控建设,财务报告的真实性及完整性更是重中之重。经过一年多的摸索、实践,中国联通结合公司特点和控制重点,逐步建立健全了内部控制体系,并于顺利经过了外部审计师对中国联通的内控审计,从开始每年根据实际情况变化不断完善内控体系,以真正实现向管理要效益 2

的目的。 中国联通经过不断完善制度建设,推进了内部控制有效实施。 一、梳理业务流程,制定<中国联通内控制度规范>。 在诸多繁杂的工作中,流程梳理无疑是第一步,联通总部将各项业务进行了认真研究和梳理,制定了<中国联通内控制度规范>,内容涵盖公司的经营管理、IT系统控制、投融资管理、财务监控、法律法规监督等,涉及资本性支出、收入、成本费用、资金及资产、财务及信息披露、其它等6个方面共351个业务流程,并用文字、流程图、风险控制文档等多种形式,将各业务和事项的风险类型、控制目标、关键控制点、控制措施、控制频率加以规定和说明,形成与经营管理制度有机结合的内部控制。各省及各地市分公司依照总部内控流程进行本地化,既要满足萨班斯法案的要求,更要达到加强管理、降本增效的要求。<中国联通内控制度规范>使企业员工了解和掌握了内部机构设置及权责分配情况,同时也促进企业各层级员工明确职责分工,正确行使职权,并加强对权责履行的监督。 二、制定<中国联通财务与信息披露关键控制>,防范与控制财务报告风险。 为规范和统一各分、子公司财务及信息披露的流程,满足公司内部管理、会计核算和对外信息披露的需求,防范与控制财务报告风险,中国联通制定了<中国联通财务与信息披露关键控制>,详细列示了财务与信息披露环节必不可少的一些关键控制。对风险的控 3

相关主题
文本预览
相关文档 最新文档