精华内容
下载资源
问答
  • POSIX标准总体分析

    万次阅读 2016-03-26 12:12:28
    POSIX标准总体分析 转自: http://blog.csdn.net/novagx/article/details/2077561 POSIX 标准总体分析  POSIX,全称为可移植性操作系统接口,是一种关于信息技术的IEEE标准。它包括了系统应用程序接口...

    POSIX标准总体分析

    转自:http://blog.csdn.net/novagx/article/details/2077561

    POSIX标准总体分析

        POSIX,全称为可移植性操作系统接口,是一种关于信息技术的IEEE标准。它包括了系统应用程序接口(简称API),以及实时扩展[C语言]。

    该标准的目的是定义了标准的基于UNIX操作系统的系统接口和环境来支持源代码级的可移植性。现在,标准主要提供了依赖C语言的一系列标准服务,再将来的版本中,标准将致力于提供基于不同语言的规范。

    该标准对核心需求部分定义了一系列任何编程语言都通用的服务,这一部分服务主要从其功能需求方面阐述,而非定义依赖于编程语言的接口。语言规范主要有两部分组成。一部分包括了访问核心服务的编程语言的标准接口,这些核心服务为标准中基于编程语言的核心需求部分所定义;另一部分包含了一个特殊语言服务的标准接口。基于任何语言,与该标准一致的执行都必须遵循语言规范的任何章节。

    该标准一共被分为四个部分:

    (1)陈述的范围和一系列标准参考(第一章);

    (2)定义和总概念;(第二章)

    (3)各种接口设备;(第三章到第九章,第十一章到第十五章)

    (4)数据交换格式;(第十章)

    该标准的主要目的有:

    (1)面向应用

    (2)定义接口,而不是它的具体实现;

    (3)       涉及资源和可移植性,而非对象;

    (4)       基于c语言;

    (5)无超级用户,无系统管理;

    (6)       最小限度的接口,最小限度的定义;

    (7)应用领域广泛;

    (8)对以前的实现进行最小限度改变;

    (9)对原有程序代码做最小的修改;

    (10)  实时扩展;

    以下就对各个章节做简要分析。

    第一章概述

    1.1    范围

    定义范围的关键要素有:

    (1)定义足够的一套功能适用于实时应用程序领域的重要部分;

    (2)定义足够的实现规范和性能相关的函数,以便允许实时应用程序完成系统的确定性的响应;

    1.2一致性

    系统须支持标准中定义的接口,系统能够提供标准中没有要求到的函数和工具。在遵循于该标准的实现中,一种一致性文档是需要用到的,它必须具有与该标准相同的结构,包含有全名,数字,和标准所指示的日期,以及头文件<limits.h>和<unistd.h>中的界限值等等。该一致性文档详细说明了标准中定义的执行行为。该标准要求了应用程序的一致性,所有遵循标准的应用程序都使用基于c语言的服务。

    第二章术语和基本需求

    2.1定义

    (1)术语

    该标准中定义了一系列术语,如一致性文档,被定义的实现,可能性,无用的特性等,还定义了一些通用名词,如绝对路径,存取模式,地址空间,适当权限,定时器,异步I/O操作,后台进程,后台进程组,块文件,阻塞进程,等等。

    (2)基本概念

       扩展安全控制;文件存取允许;文件级别;文件名可移植性;路径名的决定;

    (3)错误号

    大部分函数都在外部变量errno中提供了错误号,定义如下:

             extern int errno;

     (4) 简单系统的数据类型

    这些数据类型在头文件<sys/types.h>中定义,它包含了至少以下类型:

            dev_t:   用于设备号;

            gid_t:   用于进程标志符;

            ino_t:   用于文件序列号;

            inode_t: 用于一些文件参数;

    nlink_t:    用于连接内容;

    off_t:      用于文件大小;

    pid_t:     用于进程或进程组标志符;

    size_t:     在c标准(2)中定义;

    ssize_t:    用于返回字节数和错误标志的函数;

    uid_t:      用于用户标志符;

    (4)环境描述

    当一个进程开始执行时,将调用一个表示环境的字符串数组,这个数组为外部变量environ所指向,其定义如下:

    extern char **environ;

     (5) 其他

       在该章中,标准还总体介绍了c语言定义的一些标志符,数字方面的限制,以及一些符号常量,这些在以后的章节中都会一一出现。

           以下是OSE服务的简要设计描述的一个清单。这些要求详细叙述在POSIX规范书中。

    l     进程源语

    进程源语所涉及的函数完成了大多数简单的操作系统服务,如进程处理,进程信号,以及定时器。一般情况下,该标准所确定的进程的所有属性都不能被一个进程源语改变,除非描述符特别指明。

     

    l     进程环境

    l     目录与文件

    目录与文件所涉及的函数执行了一系列操作系统服务,例如文件的创建和删除,检测,修改特性。它们提供了主要的方法,进程因为一系列 I/O操作使用他们来存取文件和目录。

     

    l     输入输出原语

        这些子文件和管道函数处理输入和输出。功能被指定为进行文件描述符管理和I/O活动之间得平衡调节。

    l     设备驱动和分类函数

                该章节描述了一个基本的终端接口和一些基本的终端控制函数,如果执行时被提供,所有的异步通信端口都应该支持它,接口是支持网络连接还是异步端口或者两者都支持由完成者定义,一致性文档应该描述那些设备类型被这些接口所支持。本章的一些函数主要应用与进程的控制终端

    l     基于c语言得服务

     

    l     系统数据库

     

     

    l     数据交换格式

     

    l     异步

     

     

    l      内存管理

     

    l      执行调度

     

     

    l      时钟和定时器

     

    l      消息传递

     

     

                     第三章进程原语

      

    3.1进程的创建和执行

    1.进程创建

       函数原型:pid_t   fork (void)

      函数功能:调用时需要引用的头文件是<sys/types.h>,fork()创建了一个新的进程。

    2.执行一个文件

    函数原型:int exec1(const char *path, const char *arg, …);

              int execv(const char *path, const *char argv[] );

              int execle(const char *path, const char *arg, …);

              int execve(const char *path, const *char argv[], char *const envp[])

              int execlp(const char *file, const char *arg. …);

              int execvp(const char *file, char *const argv[]);

    函数功能:exec系列的函数用一个新的进程映像替代了当前的进

    程映像,这个新的进程映像创建于一个规则的,可执行文件,叫做新进程映像文件。执行成功无返回值因为调用进程映像以为新的进程映像所覆盖。

    3.2 进程的终止

    进程的终止有两种情况:

    (1)从main()函数返回时或者执行exit()或_exit()函数时正常的终止;

    (2)被abort()函数请求或者接受到一些信号时不正常的终止;

    1.等待进程终止

       函数原型:#include<sys/types.h>

    #include<sys/wait.h>

    pid_t wait(int *stat_loc);

    pid_t waitpid(pid_t pid,int *stat_loc.int options);

       函数功能:wait()和waitpid()允许调用进程获得它的一个子进程的状态信息。Wait()函数将挂起调用进程直到获得了它的子进程的状态信息,或者是直到获得一个终止进程信号;如果pid=-1并且options=0,waitpid()函数功能将和waitpid()相同,否则它的功能将依据pid和options的值而改变。

    2. 终止一个进程

       函数原型:void_exit(int status);

      函数功能:_exit()函数将终止一个调用进程,该函数不能返回给其调用者

    3.3信号

    在头文件<signal.h>终声明了sigset_t类型和sigaction结构。完成所定义的信号分三类:必需的信号;任务控制信号;内存保护信号,分别如下表:

    必需信号

    符号常量

    描述

    SIGABRT

    非正常终止信号

    SIGALRM

    超时信号

    SIGFPE

    错误运算操作

    SIGHUP

    为控制中断所检测到的挂断

    SIGILL

    无效硬件信号的检测

    SIGINT

    交互式信号

    SIGKILL

    终止信号

    SIGPIPE

    写信号

    SIGQUIT

    交互式终止信号

    SIGSEGV

    无效内存引用检测信号

    SIGTERM

    终止信号

    SIGUSR1

    保留信号

    SIGUSR2

    保留信号

    作业控制信号

    符号常量

    描述

    SIGCHLD

    子进程终止或停止

    SIGCONT

    停止后继续

    SIGSTOP

    停止信号

    SIGTSTP

    交互式的停止信号

    SIGTTIN

    从控制终端读

    SIGTTOU

    写到控制终端

    内存保护信号

    符号常量

    描述

    SIGBUS

    获取内存中不确定的部分

    每一个进程有一个进程标记(process mask),它定义了一组产生但被阻塞传递的信号集。Sigaction(),sigpromask(),sigsuspend()

    函数控制这个进程标记的行为。

    1.送一个信号到进程

    函数原型:#include <sys/types.h>

              #include<signal.h>

              int kill(pid_t pid, int sig)

    函数功能:该函数发送一个信号到一个由pid指明的进程或者进程组,sig标志了信号类型,其值是0或者上表中的值。如果发送成功,返回‘0’,否则返回‘1’。

    2. 操纵信号集

     函数原型:#include<signal.h>

    int sigemptyset(sigset_t *set);

    int sigfillset(sigset_t *set);

    int sigaddset(sigset_t *set, int signo);

    int sigdelset(sigset_t *set, int signo);

    int sigisemeber(const sigset_t *set,int signo);

     函数功能:sigsetops源语操纵信号集。他们操作以数字为对象,这些数据由应用程序的地址所指向,而不是以系统所知的信号集为对象。

    3. 检测和更改信号的行为

     函数原型:#include<signal.h>

                int sigaction(int sig,const struct sigaction *act,struct sigaction *oact);

                 函数功能:该函数允许调用函数检查与确定的信号相联系的行为,

                            参数sig确定了信号,sigaction结构在头文件<signal.h>中被定义,描述了所采取的行为。如果参数act不为null,它指向一个结构,它指定了与信号相联系的行为。如果参数oact不为null,先前与信号相联系的行为将被存储到由oact指向的地方。

    4. 检查和改变阻塞信号

     函数原型:#include<signal.h>

    int sigprocmask(int how,xonst sigset_t *set,sigset_t *oset);

     函数功能:该函数用来检查和改变调用进程的信号标记(signal mask),如果参数set不为null,它指向一个信号集的用于改变当前的阻塞集。参数how指明了改变方式,参数oset不为null时,先前的信号标记被存储在它所指向的地方,如果参数set为null,则参数how就没有意义了,而且进程的信号标记不能随函数调用而改变。

    5.检查未定的信号

     函数原型:#include<signal.h>

                int sigpending(sigset_t *set);

     函数功能:该函数存储一个信号集,这些信号是在被调用进程传输和未定的情况下阻塞的,由参数set所指向。

    6.等待一个信号

     函数原型:#include<signal.h>

                 int sigsuspend(const sigset_t *sigmask);

      函数功能:该函数用参数sigmask所指向的信号集取代了进程信号标记(signal mask),然后挂起该进程直到接受到一个信号,其行为是执行信号跟踪功能或者是终止该进程。

    7.同步接受一个信号

     函数原型: #include<signal.h>

                 int sigwaitinfo(const sigset_t *set, siginfo_t *info);

                 int sigtimedwait(const sigset_t *set,siginfo_ *info, const struct timespec *timeout );

     函数功能:该函数从参数set所确定的信号集中选择一个未定的信号出来。如果该函数成功,返回一个信号数;否则返回-1。

    8.排队一个信号到进程

     函数原型:#include<signal.h>

               int sigqueue(pid_t pid,int signo, const union sigval value);

     函数功能:该函数功能是使由signo确定的信号将参数value所确定的值发送到由pid指明的进程中去。

    3.4 定时器操作

    1.调度警报

       函数原型:unsigned int alarm(unsigned int seconds);

      函数功能:当参数seconds指定的一段实时时间过去后,该函数将发送一个SIGALRM信号到调用进程。

    2.挂起进程的执行

       函数原型:int pause(void);

      函数功能:该函数挂起一个调用进程直到得到一个信号,这个信号或者执行信号跟踪功能或者是终止该进程。如果是终止进程,该函数不返回;如果是执行信号跟踪功能,则该函数在信号跟踪函数返回后也要返回。

    3.延迟进程的执行

     函数原型:unsigned int sleep(unsigned int seconds);

     函数功能:该函数使当前进程从执行状态转化为挂起状态,直到参数seconds所指定的一段实时时间过去后,或者是一个唤醒信号跟踪功能或终止进程功能的信号到来。该挂起时间由于系统的其他调度活动可能会比要求的时间长。

     

    第三章进程环境

    4.1 进程标志符

    1.获得进程和父进程的ID

     函数原型:#include<sys/types.h>

    pid_t getpid(void);

    pid_t getppid(void);

     函数功能:getpid()返回调用进程的进程ID,

    getppid()返回调用进程的父进程ID.

    4.2 用户ID

    1.获得真实用户,有效用户,真是组,有效组的ID

       函数原型:#include<sys/types.h>

    uid_t getuid(void);

    uid_t geteuid(void);

    gid_t getgid(void);

    gid_t getegid(void);

      函数功能:getuid()返回调用进程的真实用户ID, geteuid()返回调用进程的有效用户ID,getgid()返回调用进程的真实组ID,getegid()返回调用进程的有效组的ID。

    2.设置用户和组的ID

     函数原型:#include<sys/types.h>

                int setuid(uid_t uid);

                int setgid(gid_t gid);

     函数功能:这两个函数分别根据进程的权限设置真实用户ID,有效用户ID,真实组ID,有效组ID。

    3.获得辅助组ID

     函数原型:# include<sys/types.h>

                int getgroups(int gidsetsize.gid_t grouplist[]);

     函数功能:该函数在队列的组列表中填入调用进程的辅助组ID。参数grouplist确定了组列表中的元素个数。

    4.获得用户名

     函数原型:char *getlogin(void)

      函数功能:该函数返回一个指针,指向与调用进程相关的用户名。

    4.3进程组

    1.获得进程组ID

     函数原型:#include<sys/types.h>

    pid_t getpgrp(void);

     函数功能:该函数返回调用进程的进程组ID。

    2. 创建会议并且设置进程组ID

     函数原型:#include<sys/types.h>

    pid_t setsid(void)

     函数功能:如果调用进程不是进程组的引导者,则该函数将创建一个新的会议。该调用进程应该为新会议的会议引导者,应该为新进程组的引导,应该没有控制终端。进程组的ID应该等于该调用进程的ID。

    3.为作业控制设置进程组ID

     函数原型:#include<sys/types.h>

                int setpgid(pid_t pid,pid_t pgid);

     函数功能:如{_POSIX_JOB_CONTROL}被定义,则该函数用来加入已经存在的进程组或者创建一个新的进程组。

    4.4系统标志

    1.获得系统名

     函数原型:#include<sys/utaname.h>

    int uname(struct utsname *name);

     函数功能:该函数存储了鉴别当前操作系统的信息。

    4.5 时间

     1得到系统时间

    函数原型:#include<time.h>

              time_t time(time_t *tloc);

    函数功能:该函数返回自从一时间点以来的某个时间值,以秒为单位。参数tloc指向一个时间值所存储的地方。

    2. 获得进程时间

     函数原型:#include<sys/times.h>

    clock_t times(struct time *buffer);

     函数功能:参数buffer指向一个结构,该函数向该结构填写有关时间的信息。Clock_t和tms结构在<sys/times.h>中定义。

    4.6环境变量

    1.获取环境

     函数原型:#include<stdlib.h>

    char *getenv(const char *name);

     函数功能:该函数在环境列表查找字符串name=value,返回指向value的指针。如果没有找到,则返回null。

    4.7 终端标志

    1.产生终端路径

     函数原型:#include<stdio.h>

                 char Ictermid(char *s);

     函数功能:该函数产生一个字符串,作为路径名,提交到当前进程的当前控制终端。

    2.确定终端设备名

     函数原型:char *ttyname(int fildes);

                int isatty(int fildes);

     函数功能:ttyname()返回一个指针指向一个字符串,它包含了与文件描述符fildes相关的终端名;如果fildes是一个有效的与终端联系的文件描述符,isatty()返回“1”,否则返回“0”。

    4.8可配置的系统变量

    1.获得可配置的系统变量

     函数原型:#include<unistd.h>

    long sysconf(int name);

     函数功能:该函数提供了一个应用方法来决定可配置系统变量的当前值。参数name代表了所查询的系统变量。

     

    第五章文件和目录

    5.1目录

    1.目录的入口形式

         头文件<dirent.h>定义了一个结构和目录程序用到的类型,没有确定的文件内部格式。Readdir()返回了一个指针指向一个类型对象struct dirent。

    2.目录操作

     函数原型:#include<sys/types.h>

    #include<dirent.h>

    dir *opendir(const char *dirname);

    struct dirent *readdir(dir *dirp);

    void rewinddir(dir *dirp);

    int closedir(dir *dirp);

     函数功能:opendir()根据参数dirname打开一个目录流;readdir()返回一个指针,它指向一个目录流中当前位置的目录入口,目录流由参数dirp指向;rewinddir()重置目录流的位置到目录的起点;closedir()关闭目录流,如成功,则返回“0”值。

    5.2工作目录

     1改变当前的工作目录

       函数原型:int chdir(const char *path);

       函数功能:path指向目录的路径名。该函数使命名的目录成为当前的工作目录。

     2获得工作目录路径名

       函数原型:char *getcwd(char *buf,size_t size);

       函数功能:该函数复制当前工作目录的绝对路径名到buf所指向的队列中。

    5.3基本文件的创建

     1打开一个文件

       函数原型:#include<sys/types.h>

                  #include<sys/stat.h>

                  #include<fcnt1.h>

                  int open(const char *path, int oflag,…);

       函数功能:open()在文件和文件描述符之间建立了一个连接,它创建了一个指向一个文件的打开文件描述,参数path指向文件的路径名。

     2创建一个新文件或者重写一个已经存在的文件

       函数原型:#include<sys/types.h>

                  #include<sys/stat.h>

                  #include<fcnt1.h>

                  int creat(const char *path, mode_t mode);

       函数功能:该函数调用creat(path,mode)相当于open(path,o_wronly/o_creat/o_trunc,mode);

     3设置文件的创建标记

       函数原型:#include<sys/types.h>

                  #include<sys/stat.h>

                  mode_t umask(mode_t cmask);

       函数原型:umask()设置进程的文件模式创建标记到cmask,并且返回原来的标记值。

     4连接到一个文件

       函数原型:int link(const char *existing,const char *new);

       函数功能:参数existing指向路径名来命名存在文件,参数new指向一个路径名,它命名了一个创建的新的目录入口。该函数为已存在的文件自动的创建一个新的连接,并且将文件连接数加1。

    5.4特殊文件创建

     1生成一个目录

       函数原型:#include<sys/types.h>

                  #include<sys/stat.h>

                  int mkdir(const char *path,mode_t mode);

       函数功能:该函数依据参数path创建一个新的目录。新目录的允许位根据mode初始化。

     2创建一个FIFO类型的文件

       函数原型:#include<sys/types.h>

                  #includesys/stat.h>

                  int mkfifo(const char *path,mode_t mode);

       函数功能:mkfifo()创建一个新的fifo类型文件,它由path指向的路径名命名。

    5.5文件的移动

     1移动目录入口

       函数原型:int unlink(const char *path);

       函数功能:该函数移去由参数path指向得路径名所命名得连接并将连接数减去1。

     2移去一个目录

       函数原型:int rmdir(const char *path)

       函数功能:

     3重命名一个文件

       函数原型:int rename(const char *old,const char *new);

       函数功能:该函数改变一个文件的名字,参数old指向被重命名文件的路径名,参数new指向文件的新路径名。

    5.6文件特征

    5.7可配置路径名变量

     

    第六章输入与输出源语

    6.1管道

      1创建内进程通道

       函数原型:int pipe(int filedw[2]);

       函数功能:该函数创建一个管道并且创建两个文件描述符,一个是fildes[0],一个是fildes[1],它们分别指的是‘读’与‘写’的管道端。

    6.2文件描述符控制

       1复制一个打开文件描述符

        函数原型:int dup(int fildes);

                   int dup2(int fileds,int fileds2);

        函数功能:这两个函数为fcntl()服务提供了两个选择的接口,用到了F_DUPFD命令。

    6.3撤除文件描述符

     1关闭一个文件

       函数原型:int close (int fildes);

       函数功能

    6.4输入和输出

     1文件读

       函数原型:ssize_t read(int fildes,void *buf,size_t nbyte);

       函数功能:

     2文件写

    函数原型:ssize_t write(int fildes,const void *buf,size_t nbyte);

    函数功能:

    6.5一个文件的控制操作

     1 文件控制操作的数据定义

           头文件<fcnt1.h>为fcntl()和open()定义了一下的要求和参数:

                         fcntl()的_cmd值

    常量

    描述

    F_DUPFD

     

    F_GETFD

     

    F_GETLK

     

    F_SETFD

     

    F_GETTFL

     

    F_SETFL

     

    F_SETLK

     

    F_SETLKW

     

     2文件控制

       函数原型:#clude <sys/types.h>

                  #clued<unistd.h>

                  #include<fcntl.h>

                  int fcntl(int fildes,int cnd,…);

       函数功能:fcntl()为打开的文件提供了一系列控制,参数fildes是一个文件描述符。Cmd决定了控制的内容。

     3读/写文件偏移量的重新定位

       函数原型:#include<sys/types.h>

                  #include<unistd.h>

                  off_t lseek(int fildes,off_t offset,int whence);

      函数功能:lseek()为fildes所指定的文件重新设置偏移量。

    6.6文件同步

     1文件的状态同步

       函数原型:#include<unistd.h>

                  int fsync(int fildes);

       函数功能:该函数用来暗示所有的文件描述数据被传输到了存储设备上。

     2 文件数据的同步

    函数原型:#include<unistd.h>

                int fdatasync(int fildes);

     函数功能:该函数迫使当前所有排队的I/O操作进入同步 I/O状态。

    6.7异步输入与输出

     1●异步输入与输出的数据定义

           头文件<aio.h>能使<sys/types.h>,<signal.h>,<time.h>

    和<fcntl.h>中的符号可见。

    ● 异步I/O控制块

    异步I/O控制块结构aiocb在许多异步I/O接口中使用,它在<aio.h>中定义。

            ●主要常量

          2 异步读

            函数原型:#include<aio.h>

                      int aio_read (struct aiocb *aiocbp);

           函数功能:aiocbp->io_nbytes,表示读的字节数;aiocbp->aio_fildes,表示读的文件;aiocbp->aio_buf,表示读到的缓冲区。

         3异步写

          函数原型:#include<aio.h>

                     int aio_write(struct aiocb *aiocbp);

           函数功能:参数表示同上。

         4列出直接I/O

          函数原型:#include<aio.h>

                     int lio_listio(int mode,struct aiocb *const list[],int nent,struct sigevent *sig);

          函数功能:该函数允许用一个函数调用初始化一个I/O请求

    列表。

     5 得到异步I/O操作的错误状态

    函数原型:#include<aio.h>

              int aio_error(const struct aiocb *aiocbp);

    函数功能:该函数返回aiocbp指向的结构所表示的错误状态。

     6 得到异步I/O操作的返回状态

    函数原型:#include<aio.h>

              ssize_t aio_return(struct aiocb *aiocbp);

    函数功能:

     7 删除异步I/O请求

    函数原型:#include<aio.h>

              int aio_cancel (int fildes,struct aiocb *aiocbp);

    函数功能:参数fildes是文件描述符,参数aiocbp指向异步I/O控制块上的请求删除部分。

     8 等待异步I/O请求

    函数原型:#include<aio.h>

              int aio_suspend(const struct aiocb *const list[],int nent,const struct timespec *timeout);

    函数功能:标准定义该函数挂起调用进程直到至少一个list指向

    的异步I/O操作完成,或者一个信号中断了一个函数,

    或者超时了(timeout指定)。

     9 异步文件同步化

    函数原型:#include<aio.h>

              int aio_fsync(int op,struct aiocb *aiocbp);

    函数功能:该函数迫使所有与(参数aiocbp指向的)结构aiocb中aio_fildes所指定的文件相关异步I/O操作进入同步状态。

     

          第七章设备和面向类的函数

    7.1基本的终端接口

     1 接口特性

               ●当一个终端文件被打开,通常它将引起进程等待直到连接被建立。

                ●进程组

                     一个终端可以具有与它相关的前台进程组,它发挥特定的角色,后面会讲到。

            控制终端

            终端存取控制

            输入操作和读进程

            规范的输入操作

            非规范模式的输入操作

            写数据和输出处理

            特殊的符号(INTR,QUIT,ERASE,KILL…)

            modem断掉连接

            关闭终端设备文件

     2 可设置的参数

        ●termios机构

         该结构在<termios.h>中定义,在控制特定的终端I/O特性中要用到。

       ●输入模式                                                                                            

                        termios c_iflap值域

    标记名

                  描述

    BRKINT

    信号中断

    ICRNL

           输入时将CR映射到NL

    IGNBRK

    忽略中断状态

    IGNCR

              忽略CR

    IGNPAR

    忽略奇偶错误

    INLCR

    输入时将NL映射到CR

    INPCK

    输入奇偶校验使能

    ISTRIP

    Strip字符

    IXOFF

              开始/停止输入控制使能

    IXON

              开始/停止输出控制使能

    PARMRK

                 产生奇偶错误

        ●输出模式

        ●控制模式

           

    标记名

    描述

    CLOCAL

               忽略modem状态行

    CREAD

                   接受使能

    CSIZE

                 每个字节的位数

    CS5

    5位

    CS6

    6位

    CS7

    7位

    CS8

                    8位

    CSTOPB

          发送一个或两个停止位

    HUPCL

           在最后的关闭中挂起

    PARENB

            奇校验使能

    PARODD

    奇校验或偶校验

    ●本地模式

                      termios c_lflag值

    标记名

    描述

    ECHO

    响应使能

    ECHOE

    响应ETASE

    ECHOK

    响应KILL

    ECHONL

    响应’/n’

    ICANON

    规范输入

    IEXTEN

    扩展函数使能

    ISIG

    信号使能

    NOFLSH

    中断,停止或挂起后关掉flush

    TOSTOP

    为后台输出发送SIGTTOU

    ●特殊的控制字符

     这些特殊的控制字符值在队列c_cc中定义,分为规范和非规范两种模式。

    ●波特率值

    3 波特率函数

     函数原型:#include<termios.h>

    speed_t cfgetospeed(const struct termios *termios_p);

    int cfsetospeed (struct termios *termios_p,speed_t speed);

    speed_t cfgetispeed(const struct termios *termios_p);

    int cfsetispeed(struct termios *termios_p,speed_t speed);

     函数功能:以上这些接口被用来在termios结构获得和设定输入与输出的波特率值。

    7.2基本的终端接口控制函数

    1 获得并设定状态

     函数原型:#include<termios.h>

    int tcgetattr(int fildes,struct termios *termios_p);

    int tcsetattr(int fildes,int optional_actions,const struct termios * termios_p);

       函数功能:tcgetattr()获得fildes所确定的文件的参数并将其存储在t’erops_p所指向的结构中;tcsetattr()将设置参数。

     2行控制函数

      函数原型:#include<termios.h>

                 int tcsendbreak(int fildes,int duration);

                 int tcdrain(int fildes);

                 int tcflush(int fildes,int queue_selector);

                 int tcflow(int fildes,int action)’

      函数功能:如果终端使用异步连续数据传输,tcsendbreak()引起在一段时间内连续的‘0’位传输;tcdrain()等待直到输出传输完毕;tcflush()和tcflow()是溢出的相关处理。(参考第212页)

     3取得前台进程组的ID

      函数原型:#include<sys/types.h>

                pid_t tgetpgrp(int fildes);

        功能:

     4设置前台进程组ID

      函数原型:#include<sys/types.h>

                 int tcsetpgrp(int fildes,pid_t pgrp_id);

      功能:如果进程支持控制终端,该函数设置与终端相关的前台进程组ID到pgrp_id。

     

    第八章基于C语言的服务

    8.1 参考的C语言规范

     1时间函数的扩展

     2 setlocale()函数的扩展

       函数原型:#include<locale.h>

    char *setlocale(int category,const char *locale);

      函数功能:该函数根据参数category和locale设置,更改或者查询进程现场。

    8.2 C语言输入/输出函数

     1映射一个流指针到一个文件描述符

      函数原型:#include<stdio.h>

      函数功能:该函数返回一个与流相关的整型文件描述符。

     2根据一个文件描述符打开一个流

      函数原型:#include<stdio.h>

                 FILE *fdopen(int fildes,const char *type);

      函数功能:该函数联合一个流和一个文件描述符。

     3其他文件类型函数之间的相互作用

          一个单一的文件描述说明可以通过流和文件描述符访问,流

    或者是文件描述符被称作位打开文件的句柄,一个打开文件说明

    可以有多个句柄。句柄可以在不影响重要的打开文件说明的情况

    下被创建和删除,创建如fcntl().dup(),fdopen(),fileno(),fork();删除

    如fclose(),close()。

    (1)fopen()随着open()的调用分配描述符,基础函数为

    open()。

    (2)fclose():该函数完成在与FILE流相关的,对文件描述符的close()功能。

    (3)freopen():具有fclose()和fopen()的特点。

    (4)fflush():如果流可写或者缓存数据还没有写入文件时,

    该函数标记下基础文件st_ctime和st_mtime的

    值。

    (5)fgetc(),fgets(),fread(),getc(),getchar(),gets

    (),scanf(),fscanf():这些函数标记更新的st_atime值。

     基础函数是read()和lseek()。

    (6)fputc(),fputs(),fwrite(),putc(),putchar(),puts(),printf(),fprintf():

    从以上任一个函数的成功执行到下一个调用(在同一个流中的fflush()或fclose()或exit()或abort()),记下 更新的st_ctime和st_mtime值。基础函数是write()和

     lseek()。

    (7) fseek(),rewind():如果流可写或者缓存数据还没有写

    入文件时,该函数标记下文件更新的st_ctime和st_mtime值。基础函数是

    lseek()和write()。

    (8) perror():记下与标准错误流相关的文件。

    (9) tmpfile():fopen()执行后为文件分配文件描述符。

    (10)        ftell():基础文件是lseek()。执行fflush()后执行该

    函数的结果与执行fflush前执行该函数的结果相同。

    (11)        报错

    (12)        exit(),abort():exit()终止进程的时候要关闭流,

     abort()只终止进程对流没有影响。

     4 文件操作-----remove()函数

    该函数和unlink()函数的功能一样。

    8.3其他的C函数

     1 非局部跳转

    函数原型:#include<setjmp.h>

              int sigsetjmp(sigjmp_buf env,int savemask);

              void siglongjmp(sigjmp_buf env,int val);

    函数功能:sigsetjmp()宏要与标准中setjmp()宏的定义一致,如果参数savemask不为“0”,sigsetjmp()就要保存当前的信号标记作为调用环境的一部分。Siglongjmp()同理。

     2 设置时间域

    函数原型:#include<time.h>

              void tzset(void);

    函数功能:该函数用环境变量TZ的值来设定时间变化信息。

     

     

    第九章系统数据库

    9.1系统数据库

     本章描述了两个数据库:组数据库和用户数据库。

     组数据库包括的信息有:组名,组的数字ID,组中的用户列表;

     用户数据库包含的信息有:用户名,用户的数字ID,组的数字ID,初始化的工作目录,和初始化的用户程序。

    9.2数据库的访问

     1组数据库的访问

       函数原型:#include<sys/type.h>

                  #include<grp.h>

                  struct group *getgrgid(gid_t gid);

                  struct group *getgrnam(const char *name);

       函数功能:getgrid()和getgrnam()返回指针,它指向一个struct

     group类型的对象,包含了组数据库的入口。

     2 用户数据库的访问

    函数原型:#include<sys/types.h>

              #include <pwd.h>

              struct paswd *getpwuid(uid_t uid);

              struct passwd *getpwnam(const char *name);

    函数功能:getpwuid()和getpwnam返回一个指针,指向struct

     passwd类型的一个对象,它包含了用户数据库的入

    口。

     

     

    第十章数据交换形式

    10.1归档/交换文件格式

       1 扩展的tar格式

       2扩展的cpio格式:面向字节的归档格式,包括了文件头,文件名和文件内容。

       3 大流量:该格式被看作是字节流。

                

     

     

     

    第十一章同步

    11.1信号量特征

        头文件<semaphore.h>定义了sem_t类型,它用于信号量操作中。sem_t代表了信号量,用文件描述符能够实现这些信号量,应用程序能够打开至少{OPEN_MAX}这么多的文件和信号量。标准中,头文件<semaphore.h>能使头文件<sys/types.h>和<fcntl.h>中的符号可见。

    11.2信号量函数

     1初始化一个未命名的信号量

       函数原型:#inxlude<semaphore.h>

                  int sem_init (sem_t *sem,int pshared,unsigned int value);

       函数功能:如果{_POSIX_SEMAPHORES}定义了:该函数被用

    来初始化sem引用的未命名信号量。在成功调用该函

    数以后,在接下来的sem_wait(),sem_trywait(),sem_post(),sem_destroy()的调用中,该信号量将被用到。如果参数pshared不为零,信号量将在进程中被共享,任何可以访问信号量sem的进程都可以使用sem。只有sem能被用来进行同步。如果参数pshared为零,则结构不确定。如果标准中未定义,可以由执行者来支持该函数。

    2删除一个未命名信号量

     函数原型:#include <semaphore.h>

    int sem_destroy(sem_t *sem);

     函数功能:如果{_POSIX_SEMAPHORES}定义了,该函数用来删除sem引用的未命名信号量,只有在sem_init()中创建的信号量才能被该函数删除。

     3初始化/打开一个命名信号量

      函数原型:#include<semaphore.h>

                 sem_t *sem_open(const char *name,int oflag,…);

      函数功能:如果{_POSIX_SEMAPHORES}定义了,该函数在进程和命名信号量之间创建一个链接。接着调用带有信号量名name的该函数,进程引用与name相关的信号量。该信号量在一些函数的调用中用到,如sem_wait(),sem_trywait(),sem_post,和sem_close()。信号量一直可用知道调用函数sem_close(),_exit,exec()关闭它。参数oflag控制是否信号量由sem_open()创建或者仅被它访问。

     4关闭一个命名信号量

      函数原型:#include<semphore.h>

                 int sem_close(sem_t *sem);

      函数功能:如果{_POSIX_SEMAPHORES}定义了,该函数用来提示调用进程已经完成使用sem所指明的信号量。该函数释放系统资源,这些资源被拥有该信号量的进程占有。

     5移走一个命名信号量

      函数原型:#include<semaphore.h>

                 int sem_unlink(const char *name);

      函数功能:该函数将移走被字符串name命名的信号量。如果该信号量当前被其他进程引用,则该函数对信号量状态没有影响。如果一个和更多的进程打开了该信号量,则销毁该信号量被延迟知道所有的信号量被sem_close(),_exit(),exec关闭。

     6锁定一个信号量

      函数原型:#include<semaphore.h>

                 int sem_wait (sem_t*sem);

                 int sem_trywait(sem_t *sem);

      函数功能:sem_wait()锁定sem引用的一个信号量,对该信号进行锁定操作。如果信号量为“0”,调用进程将不会返回直到锁定了这个信号量或者被一个信号中断。Sem_trywait()只能在信号量当前没被锁定的情况下锁定它,否则将不会锁定信号量。成功返回,信号量的状态将被锁定直到sem_post()被调用并且成功返回。

     7解锁一个信号量

      函数原型:#include<semaphore.h>

                 int sem_post(sem_t *sem);

      函数功能:该函数通过对一个信号量的解锁操作解锁一个被sem引用的信号量。如果该操作的结果,信号量值为正数,则没有进程被锁定来等待一个信号量解锁,信号量值是单一的增加。如果信号量值为“0”,则进程被锁定来等待一个信号量被允许从sem_wait()成功返回。

     8取得一个信号量值

      函数原型:#include<semaphore.h>

                 int sem_getvalue(sem_t *sem,int *sval);

      函数功能:该函数更新参数sval所引用的位置,在不改变信号量状态的情况下得到信号量值。更新的值代表了一个确切的值,它产生在调用中的一个不定时刻,但它返回给调用进程是不一定需要信号量的确定值。如果sem被锁定,则sem_getvalue()返回的值为0,或者负数,它代表了等待信号量的进程数。

     

     

                    第十二章 内存管理

    该章节描述了进程内存锁定,内存映象文件,和共享内存工具。

    内存锁定和内存映象文件以页的方式定义。执行者可以据据页大小的规范限制和排列锁定和映象范围。页的大小,以字节为单位,是一个可配置系统变量。默认为1B。

    内存锁定保证了一部分地址空间的驻留。

    12.1内存锁定函数

     1 锁定/解锁进程地址空间

       函数原型:#include<sys/mman.h>

    int mlockall(int flags);

    int munlockall(void);

          函数功能:mlockall()使进程地址空间所映射的所有页面成为内存驻留区,直到解锁或者进程退出或者execs另一个进程映象。参数flags决定了是否被锁定的页面是由当前,(将来,或者两者都是)的进程地址空间映射的。Munlockall()解锁当前所有的进程地址空间映射页面。所有映射到进程地址空间的页面,调用了该函数,将不会被锁定,除非有中断调用mlockall()确定MCL_CURRENT,或者并发调用mlockall()确定MCL_CURRENT。

     2锁定/解锁一连续的地址空间

      函数原型:#include<sys/mman.h>

                 int mlock(const void *addr,size_t len);

                 int munlock(const void *addr,size_t len);

      函数功能:mlock()使一个范围的进程地址空间成为内存驻留

    区(addr决定了空间的起始地址,len决定了空间长

    度)直到解锁或者进程退出或者execs另一个进程映

    象;munlock()解锁一个范围的进程地址空间(addr

    决定了空间的起始地址,len决定了空间长度);

    12.2 内存映象函数

     1 映象进程地址到一个内存目标

       函数映象:#include<sys/mman.h>

                 void *mmap(void *addr,size_t len,int prot,int flags,int fildes,off_t off);

      函数功:该函数在一个进程的地址空间和内存对象间创建一个映

    射,调用格式如:pa=mmap(addr,len,prot,flags,fildes,off);

    pa代表进程进程地址空间的地址,由执行者定义(addr

    和flags),len表示空间长度,fildes代表内存对象,off

    表示偏移量。函数成功调用返回pa,空间地址范开始

    与pa,长度为连续的len个字节;内存对象开始与off,

    长度为len字节。参数prot决定了读,写,执行,或一

    些映射数据的访问活动的集合。

     2 取消以前映射地址的映射关系

       函数原型:#include<sys/mman.h>

    int munmap(void *addr,size_t len);

       函数功能:该函数移去任何包含有进程地址空间的页面的映射关

    系,该进程地址空间起始于addr,长度为len字节。

     3 改变内存保护

       函数原型:#include <sys/mman.h>

    int mprotet(const void *addr,size_t len,int prot);

      函数功能:该函数更改访问的保护活动,由参数prot确定。访问对象是一部分进程地址空间,起始于addr,长度为len字节。

     4内存对象同步

      函数原型:#inxlude<sys/mman.h>

                 int msync(void *addr,size_t len,int flags);

      函数功能:该函数将所有更改了的数据写到拥有存储的地方,它包含了进程地址空间,起始于addr,长度为len字节。如果没有这样的存储区域存在,则给函数没有作用。该函数须保证写操作的完成符合所定义的同步I/O数据的一致完成性。参数flags确定了写的同步/异步性。

    12.3共享内存函数

     1打开一个共享内存对象

      函数原型:include<sys/mman.h>

                 int shm_open(const *name,int oflag,mode_t mode);

      函数功能:该函数在共享内存对象和文件描述符之间创建了一个连接。它创建了一个打开文件描述涉及到共享内存对象,并且创建了一个文件描述符指向这个打开文件描述。这个文件描述符可悲其他函数用来指向共享内存对象,参数name指向共享内存对象名。如函数调用成功,则返回一个共享内存的文件。文件状态和文件访问模式根据oflag的值来设定。

     2移去一个共享内存对象

      函数原型:int shm_unlink(const char *name);

      函数功能:该函数移去由name命名的共享内存对象。如果一个或者多个对共内存的引用在对象断开连接的同时退出的话,这个名字应在shim_unlink()返回之前移走,但是对内存对象的移走须延迟到所有对共享内存对打开和映射引用被移去后。

     

     

                     十三章 执行调度

    13.1调度参数

      一个调度参数结构sched_param包括了调度策略所支持的执行者

    所需要的调度参数,它在头文件<sched.h>中定义。执行者可根据规

    对该结构进行扩展。

    13.2 调度策略

     该章所阐述的调度术语是从概念模型上定义的,它包含了一组进程列表。这个模型只讨论了可运行进程的处理器调度,但是它注重了在其他资源考虑到处理器调度策略的情况下,增强了实时操作的可预见性。在这里,概念上讲是一个进程列表一个策略。调度策略的目的就是对这一组列表定义允许的操作(例如,在进程列表之中和之间移动进程)。每一个进程应由相关的调度策略和优先级,于每一个策略相关的是一个优先级范围。

     1 SCHED_FIFO

        该策略是一种先进先出的调度策略。如果正在执行的进程是被抢占的进程,则他应该在进程列表头;如果一个锁定的进程变成可执行进程,它就进入进程列表尾;当执行进程调用sched_setscheduler(),则函数中确定的进程被改为指定的策略;当执行进程调用sced_setparam(),进程的优先级根据参数param被修改,如果改进程是正在执行和可执行,则它将进入进程列表尾;当正在执行的进程调用seced_yield(),进程进入列表尾。

     2 SCHED_RR

        该策略与上面的策略不同的是,如果执行中检测到进程的执行时间已经到达或超过了sched_rr_get_interval()所返回的时间片,进程就进入列表尾并且进程列表头移动一个进程进入执行状态。

     3 SCHED_OTHER

     13.3进程调度函数

       1设置调度参数

        函数原型:#include<sched.h>

                   int sched_setparam(pid_t pid,const struct sched_param *param);

        函数功能:pid指明了进程,param指向了sched_param结构,该结构设定了进程的调度参数。如果pid=0,调度参数为调用进程设定。如果pid指定的进程的优先级高于正在指向的进程并且该进程可执行,则抢占现在正在运行的进程。如果当前的策略不是前面将的三种方式,则由执行者定义。

     2取得调度参数

      函数原型:#include<sched.h>

                 int sched_getparam(pid_t,struct sched_param *param);

      函数功能:该函数返回调度参数,如果一个pid进程退出并且调用进程允许,则ID等于pid的进程返回其调用参数。如果pid=0,则返回调用进程的调度参数。

     3设置调度策略和调度参数

      函数原型:#include<sched.h>

                 int sched_setscheduler(pid_t pid,int policy,const struct sched_param *param);

      函数功能:该函数设置进程的调度策略和调度参数,pid表示进程,policy指明策略,参数param指向的sched_param结构指明了调度参数。执行者可要求请求进程能允许设定自己或其他进程的调度参数。

     4取得调度策略

      函数原型:#include<sched.h>

                 int sched_getscheduler(pid_t pid);

      函数功能:该函数返回pid进程的调度策略,其返回值在头文件<sched.h>中定义。

     5放弃处理器

      函数原型:#include<sched.h>

                 int sched_yield(void);

      函数功能:该函数迫使正在执行进程放弃处理器直到重新进入进程列表头。

     6获得调度参数范围

      函数原型:#incude<sched.h>

                 int sched_get_priority_max(int policy);

                 int sched get_priority min(int policy);

                 int sched_rr_get_interval(pid_t pid,struct timespec *interval);

      函数功能:sched_get_priority_max()和sched_get_priority_min()返

    回policy调度策略相应的最大最小值。Sched_rr_get

     _interval()更新interval参数引用的timespec结构,包

    含了当前进程执行的时间限制。

     

     

    第十四章时钟和定时器

    14.1时钟和定时器的数据定义

    头文件<time.h>定义了时间设备用到的类型和主要常量。

     1 时间值的规格结构

       一个时间值结构timespec确定了单一时间值并且包括了以下值:

              

    成员类型

    成员名

    描述

    time_t

    tv_sec

    seconds

    long

    tv_nsec

    nanosenconds

    执行者可对他做扩展,tv_nsed成员要大于等于零时才可用。

    时间值结构itimerspec确定了一个初始化的定时器和各进程定时器函数用到的重复间隔。结构包括:

    成员类型

    成员名

    描述

    Struct timespec

    It_interval

    Timer period

    Struct timespec

    It_value

    Timer expiration

    执行者也可以对其做扩展。

    2 定时器活动唤醒控制块

     为了使完成支持实时信号扩展功能,各进程定时器被创建通过排列实时扩展信号来通知定时器超时的进程。Sigevent结构在头文件<signal.h>中定义,用来创建一个这样的定时器。

    3 类型定义

     在<sys/types.h>中定义。

    4 主要常量

       在<time.h>中定义:

            CLOCK_REALTIME 系统范围的实时时钟标志

            TIMER_ABSTIME    flag指定的时间对于时钟是“完全”的

    14.2时钟和定时器函数

     1 时钟

       函数原型:#include<time.h>

                 int clock_settime(clockid_t clock_id,const struct timespec *tp);

                 int coock_gettime(clockid_t clock_id,struct timespec*tp);

                 int clock_getres(clockid_t clock_id,struct timespec *res);

      函数功能:clock_settime()设置特定时钟,clock_id,到tp指定的值。

                Clock_gettime()返回当前的tp值,即时钟,clock_id;

               调用clock_getres()可以得到时钟的决定值,该值由执行

               者定义而不由进程设定。如果res不为空,则该值被存

               储在res指向的地方,如果res为空,则时钟决定值不

    被返回。一个时钟可以是系统范围的,对于所以的进程可见,所有的执行者要支持CLOCK_REALTIME的clock_id。对于这个时钟。Clock_gettime()返回的和clock_settime()确定的值代表了从一个时间点开始的时间长度,执行者也可以支持附加的时钟。借助clock_settime()设定时钟的影响由执行者定义。设置特殊时钟的权限也有执行者定义。

     2 创建一个总进程定时器

       函数原型:#include<signal>

    #include<time.h>

    int timer_create(clockid_t clock_id,struct sigevent

    *evp,timer_t *timerid);

      函数功能:timer_create()创建一个总进程定时器,用来指明时钟,clock_id,作为计时基础。该函数在timerid指向的地方返回一个timer_t类型的定时器ID,该ID在调用进程中必须是唯一的直到定时器被删除。参数evp如果不为空,则指向一个sigevent结构,定义了定时器超时时出现的异步通知。结构中sigev_notify为SIGEV_SIGNAL时,结构就包括了超时时送往进程的信号数和应用数据;如果sigev_notify为SIGEV_NONE,则不发送任何通知;sigev_notify其他的值由完成者自行定义。总进程的定时器不被其子进程通过fork()继承,它应该被exec撤销。

     3删除一个总进程定时器

       函数原型:#include<time.h>

    int timer_delete(time_t timerid);

      函数功能:该函数删除一个指定的定时器,timerid,该定时器是在以前的timer_create()中创建的。

     4总进程定时器

      函数原型: #include<time.h>

                  int timer_settime(timer_t timerid,int flags,const struct itimerspec *value,struct itimerspec *ovalue);

                 int timer_gettime(timer_t timerid,struct itimerspec *value);

    int timer_getoverrun(timer_t timerid);

      函数功能:timer_settime()设置时间直到下一个timerid指定的定时器终止。如果该函数调用时定时器已经被装备,该调用则重置时间直到value确定的下一次终止。如果value的it_value成员为零,定时器被解除。如果flag没有设定为TIMER_ABSTIME,则定时器从调用开始在it_value十亿分之一秒内超时;如果设定为TIMER_ABSTIME,该函数表现为时间直到下一次超时被设定为it_value指定的绝对时间和与timerid相联的时钟值的差值。定时器的再装由value的it_interval成员值来设定。如果参数ovalue不为空,该函数被存储在ovalue引用的地方。该函数要存储时间累计值直到timerid指定的定时器终止或重装定时器值到value参数。在任一时刻,仅有一个单一信号被派了在指定的定时器的进程中。如果支持实时信号扩展,timer_getoverrun()返回定时器终止的溢出值。

     5高度睡眠

      函数原型:#include<time.h>

                 int nanosleep(const struct timespec *rqtp,struct timespec *rmtp);

      函数功能:该函数使当前执行的进程挂起直到参数rptp指定的时

    间间隔到达或者信号被送到调用进程并且其行为就

    是唤醒信号跟踪功能或者使终止进程。挂起时间也许

    要比要求时间长是因为参数值向上舍入成一个整数或者是因为系统对其他活动的调度。但是除非被信号打断,挂起时间不会少于tqtp值,这是系统时钟,CLOCK_REALTIME测量的。

     

     

    第十五章消息传递

    15.1消息队列的数据定义

     1 数据结构

    头文件< mqueue.h>定义了以下执行者定义的类型:

        mqd_t :用于消息队列描述符

    头文件< mqueue.h>定义了以下执行者定义的结构:

        struct sigevent: 3.3中定义。mq_attr用来设定消息队列参数。

    struct sigevent结构包含了至少以下的成员:

    类型

    成员名

    描述

    long

    mq_flags

    消息队列标志

    long

    mq_maxmsg

    最大消息数

    long

    mq_msgsize

    消息的最大长度

    long

    mq_curmsgs

    当前排列的消息数

    执行者可作扩展。

    15.2消息传递函数

     1 打开消息队列

    函数原型:#include<mqueue.h>

              mqd_t mq_open(const char *name,int oflag,…);

    函数功能:该函数在进程和消息队列之间建立连接。它创建了一个消息队列描述符指向消息队列。参数oflag请求对消息队列发送或接收所需信息。如果调用进程承认对相应保护文件的读写请求,则对接收或发送消息的请求允许被通过。

     2 关闭一个消息队列

       函数原型:#include<mqueue.h>

    int mq_close(mqd_t mqdes);

      函数功能:该函数撤销消息队列描述符(mqdes)和消息队列之间的关系。如果进程成功的配属了mqdes表示的消息队列通知请求,则这个配属关系被撤销,该消息队列可用于其他进程来配属通知。

     3 移去一个消息队列

       函数原型:#include<mqueue.h>

    int mq_unlink(const char *name);

      函数功能:该函数移去路径名name指向的消息队列。如果该调用成功,并且flag没有设为O_CREATE,则mq_open()对于同一个name将会失败。所有对该队列的引用撤销后,该队列才能被关闭。该函数调用不会被阻塞指定所有的引用被关闭。

     4 发送一个消息到消息队列

       函数原型:#include<mqueue.h>

                 int mq_send(mqd_t mqdes,const char *msg_ptr,size_t mag_len,unsigned int msg_prio);

      函数功能:该函数添加参数msg_ptr指向的消息到mqdes指定的

    消息队列中去。参数msg_len表示消息长度,以字节

    为单位,该参数应小于等于消息队列的mq_msgsize

    参数,否则调用失败。如果消息队列没有满,则该函

    数的功能就是插入消息到消息队列的指定位置,这个

    位置邮msg_prio参数指定。msg_prio大者先插入队

    列,msg_prio的值应小于等于{MQ_PRIO_MAX}。

    如果消息已满并且O_NONBLOCK没有设定,该函

    数阻塞一直到空间可用或者mq_send()被信号中断。

    如果空间可用时,多于一个进程在等待发送则按优先

    级,等待最久的进程先发送它的信息。如果O_NON

    BLOCK被设定,并且队列已满,则函数返回error。

     5从消息队列接受一条消息

      函数原型:#include<mqueue.h>

                 ssize_t mq_receive(mqd_t mqdes,char *msg_ptr,size_t msg_len,unsigned int *msg_prio);

      函数功能:该函数接受mqdes确定的消息队列中最久优先级最高

    的消息,对参数值的限制同上。所选消息从队列移出,

    复制到msa_ptr指向的缓冲区。如果参数msg_prio不

    为空,则指定消息被存储在msa_prio所引用的地方。

    如果消息队列为空,并且O_NONBLODK没有设定,

    该函数阻塞直到消息排列入队列中或者该函数被信

    号中断。当有多个进程在消息到达队列后请求接受,

    则优先级原则与上相同。

     6通知一个进程队列中的一条信息可用

      函数原型:#include<mqueue.h>

                 int mq_notify(mqd_t mqdes,const struct sigevent *notification);

      函数功能:如果参数notification不为空,函数记录下调用进程被

    通知空的消息队列(由消息队列描述符mqdes相联)

    中有一条消息到来。当消息队列从空到非空时,一条

    通知消息将发送到进程中,在任一时刻,只有一个通

    知消息被一个消息队列记录。如果notifiction为空并

    且进程当前被指定的队列记录,则已存在的记录被移

    去。

     7设置消息队列参数

      函数原型:#include <mqueue.h>

                 int mq_setattr(mqd_t mqdes,const struct mq_attr *mqstat,struct mq_attr *omqstat);

      函数功能:该函数用来设置与mqdes指定的消息队列相关的参数。

    mq_attr结构中的mq_maxmsg,mq_magsize,mq_curmsgs

    成员被mq_setattr()忽略。如果omqstat为非空,则该函

    数被存储,由omqstat指明存储位置。

     8得到消息队列参数

      函数原型:#include<mqueue.h>

                 int mq_getattr(mqd_t mqdes,struct mq_attr *mqstat);

      函数功能:该函数用来取得状态信息和与mqdes消息队列相关的

    参数。

    

    
    展开全文
  • 系统总体结构设计

    千次阅读 2020-02-16 04:25:08
    系统总体结构设计     系统设计工作应该自顶向下地进行。首先设计总体结构,然后再逐层深入,直至进行每一个模块的设计。总体设计主要是指在系统分析的基础上,对整个系统的划分(子系统)、机器...


    系统总体结构设计

        系统设计工作应该自顶向下地进行。首先设计总体结构,然后再逐层深入,直至进行每一个模块的设计。总体设计主要是指在系统分析的基础上,对整个系统的划分(子系统)、机器设备(包括软、硬设备)的配置、数据的存贮规律以及整个系统实现规划等方面进行合理的安排。

    一、系统设计的任务

    1. 系统设计的概念

    系统设计又称为物理设计,是开发管理信息系统的第二阶段,系统设计通常可分为两个阶段进行,首先是总体设计,其任务是设计系统的框架和概貌,并向用户单位和领导部门作详细报告并认可,在此基础上进行第二阶段――详细设计,这两部分工作是互相联系的,需要交叉进行,本章将这两个部分内容结合起来进行介绍。

    系统设计是开发人员进行的工作,他们将系统设计阶段得到的目标系统的逻辑模型转换为目标系统的物理模型,该阶段得到工作成果――系统设计说明书是下一个阶段系统实施的工作依据。

    2.系统设计的主要内容

    系统设计的主要任务是进行总体设计和详细设计。下面分别说明它们的具体内容。

    (1) 总体设计

    总体设计包括系统模块结构设计和计算机物理系统的配置方案设计。

    <1>系统模块结构设计

    系统模块结构设计的任务是划分子系统,然后确定子系统的模块结构,并画出模块结构图。在这个过程中必须考虑以下几个问题:

    如何将一个系统划分成多个子系统;

    每个子系统如何划分成多个模块;

    如何确定子系统之间、模块之间传送的数据及其调用关系;

    如何评价并改进模块结构的质量。

    <2>计算机物理系统配置方案设计

    在进行总体设计时,还要进行计算机物理系统具体配置方案的设计,要解决计算机软硬件系统的配置、通信网络系统的配置、机房设备的配置等问题。计算机物理系统具体配置方案要经过用户单位和领导部门的同意才可进行实施。

    开发管理信息系统的大量经验教训说明,选择计算机软硬件设备不能光看广告或资料介绍,必须进行充分的调查研究,最好应向使用过该软硬件设备的单位了解运行情况及优缺点,并征求有关专家的意见,然后进行论证,最后写出计算机物理系统配置方案报告。

    从我国的实际情况看,不少单位是先买计算机然后决定开发。这种不科学的、盲目的做法是不可取的,它会造成极大浪费。因为,计算机更新换代是非常快的,就是在开发初期和在开发的中后期系统实施阶段购买计算机设备,价格差别就会很大。因此,在开发管理信息系统过程中应在系统设计的总体设计阶段才具体设计计算机物理系统的配置方案。

    (2) 详细设计

    在总体设计基础上,第二步进行的是详细设计,主要有处理过程设计以确定每个模块内部的详细执行过程,包括局部数据组织、控制流、每一步的具体加工要求等,一般来说,处理过程模块详细设计的难度已不太大,关键是用一种合适的方式来描述每个模块的执行过程,常用的有流程图、问题分析图、IPO图和过程设计语言等;除了处理过程设计,还有代码设计、界面设计、数据库设计、输入输出设计等。

    (3) 编写系统设计说明书

    系统设计阶段的结果是系统设计说明书,它主要由模块结构图、模块说明书和其它详细设计的内容组成。


    系统设计的方法与工具

    系统设计的工作复杂又细致,总体设计阶段需要进行系统模块结构设计,要将一个大系统分解成不同层次、多个模块组成的系统,在详细设计阶段要在模块结构设计的基础上,给出每个模块实现方法的细节,并对模块的输入、输出和处理过程作详细描述,以便在系统实施阶段进行程序设计时可以把这个描述直接“翻译”成用某种程序设计语言书写的程序。系统设计在技术上有相当的难度,为此需要有一定的设计方法和设计工具来指导。70年代以来,出现了多种设计方法,其中结构化设计方法是较为典型的方法,本章将对该设计方法进行论述并介绍几个常用的设计工具。

    一、结构化设计的方法

    结构化设计(STRUCTURED DESIGN, 简称SD)方法是使用最广的一种设计方法,由美国IBM公司的W·STEVENS、G·MYERS和L·CONSTANTINE等人提出。该方法适合于软件系统的总体设计和详细设计,特别是将一个复杂的系统转换成模块化结构系统,该方法具有它的优势。在使用过程中可将结构化设计方法与结构化分析(SA)方法及编程阶段的结构化程序设计方法(SP)前后衔接起来,SD方法具有以下特点:

    1. 相对独立、功能单一的模块结构

    结构化设计的基本思想是将系统设计成由多个相对独立、功能单一的模块组成的结构。由于模块之间相对独立,每一模块就可以单独地被理解、编写、测试、排错和修改,从而有效地防止错误在模块之间扩散蔓延,提高了系统的质量(可维护性、可靠性等)。因此,大大简化了系统研制开发的工作。

    2. “块内联系大、块间联系小”的模块性能标准

    “模块内部联系要大,模块之间联系要小”,这是结构化设计中衡量模块“相对独立”性能的标准。事实上,块内联系和块间联系是同一件事的两个方面。系统中各组成成分之间是有联系的,若把联系密切的成分组织在同一模块中,块内联系高了,块间联系自然就少了。反之,若把密切相关的一些组成成分分散在各个模块中,势必造成很高的块间联系,这将影响系统的可维护性。所以,在系统设计过程中一定要以结构化设计的模块性能标准为指导。

    3. 采用模块结构图的描述方式

    结构化设计方法使用的描述方式是模块结构图。例如,图6-2-1示了一个计算工资的模块结构图。

    图6-2-1  计算工资的模块结构图

    系统模块结构设计

    总体设计的另外一个主要内容是合理地进行系统模块结构的分析和定义,将一个复杂的系统设计转为若干个子系统和一系列基本模块的设计,并通过模块结构图把分解的子系统和一个个模块按层次结构联系起来。下面来介绍如何进行模块的分解、如何从数据流图导出模块结构图以及模块结构图的改进。

    一、模块分解的原则和依据   

    系统逻辑模型中数据流图中的模块是逻辑处理模块,模型中没有说明模块的物理构成和实现途径,同时也看不出模块的层次分解关系,为此在系统结构设计中要将数据流图上的各个逻辑处理模块进一步分解,用模块结构图确定系统的层次结构关系,并将系统的逻辑模型转变为物理模型。

    1.“耦合小,内聚大”的基本原则

    在结构化设计中,采用自顶向下,逐步细化的方法将系统分解成为一些相对独立、功能单一的模块。如何度量模块之间的独立性呢?

    在一个管理信息系统中,系统的各组成部分之间总是存在着各种联系的,将系统或子系统划分成若干模块,则一个模块内部的联系就是块内联系,而穿越模块边界的联系就是块间联系。由于模块之间的互相联系越多,模块的独立性就越少,因此,引入模块耦合和内聚的概念。

    耦合表示模块之间联系的程度。紧密耦合表示模块之间联系非常强,松散耦合表示模块之间联系比较弱,非耦合则表示模块之间无任何联系,是完全独立的。

    内聚表示模块内部各成分之间的联系程度。

    一般说来,在系统中各模块的内聚越大,则模块间的耦合越小。但这种关系并不是绝对的。耦合小使得模块间尽可能相对独立,从而各模块可以单独开发和维护。内聚大使得模块的可理解性和维护性大大增强。因此,在模块的分解中应尽量减少模块的耦合,力求增加模块的内聚。

      2.对子系统或模块进行划分的依据

    一个合理的子系统或模块划分,应该是内部联系强,子系统或模块间尽可能独立,接口明确、简单,尽量适应用户的组织体系,有适当的共用性。也就是上面所说的“耦合小,内聚大”。按照结构化设计的思想,对模块或子系统进行划分的依据通常有以下几种:

    (1)按逻辑划分,把相类似的处理逻辑功能放在一个子系统或模块里。例如,把“对所有业务输入数据进行编辑”的功能放在一个子系统或模块里。那么不管是库存、还是财务,只要有业务输入数据都由这个子系统或模块来校错、编辑。

    (2)按时间划分,把要在同一时间段执行的各种处理结合成一个子系统或模块。

    (3)按过程划分,即按工作流程划分。从控制流程的角度看,同一子系统或模块的许多功能都应该是相关的。

    (4)按通信划分,把相互需要较多通讯的处理结合成一个子系统或模块。这样可减少子系统间或模块间的通讯,使接口简单。

    (5)按职能划分,即按管理的功能。例如,财务、物资、销售子系统,或输入记帐凭证、计算机优解子系统或模块等等。

    一般来说,按职能划分子系统,按逻辑划分模块的方式是比较合理和方便的,图6-4-1表示了按这种方式划分所组成的系统。

    图6-4-1  子系统按职能、模块按逻辑划分所形成的系统

    详细设计

    进行了系统的总体设计后即可在此基础上进行系统的详细设计了,即各种输入、输出、处理和数据存储等的详细设计。下面分别介绍详细设计的内容。

    一、代码设计

    代码是用来表示事物名称、属性和状态等的符号。在管理信息系统中,代码是人和机器的共同语言,是系统进行信息分类、校对、统计和检索的依据。代码设计就是要设计出一套能为系统各部门公用的、优化的代码系统,这是实现计算机管理的一个前提条件。

    1. 代码设计的原则

    代码设计是一项重要的工作,合理的编码结构是使管理信息系统具有生命力的重要因素。设计代码的基本原则是:

    (1) 具备唯一确定性。每一个代码都仅代表唯一的实体或属性。

    (2) 标准化与通用性。凡国家和主管部门对某些信息分类和代码有统一规定和要求的,则应采用标准形式的代码,以使其通用化。

    (3) 可扩充且易修改。要考虑今后的发展,为增加新代码留有余地。当某个代码在条件或代表的实体改变时,容易进行变更。

    (4) 短小精悍即选择最小值代码。代码的长度会影响所占据的内存空间、处理速度以及输入时的出错概率,因此要尽量短小。

    (5) 具有规律性、便于编码和识别。代码应具有逻辑性强,直观性好的特点,便于用户识别和记忆。   

    2.分类方法

        目前最常用的分类方案有两种,一种是线分类方法一种是面分类方法。在实际应用中根据具体情况各有其不同的用途。

        线分类方法:首先给定母项,然后下分若干子项,由对象的母项分大集合,由大集合确定小集合,最后落实到具体对象

        特点:结构清晰,容易识别和记忆,易查找;

              适应于手工系统;

        缺点:结构不灵活,柔性差。

              机关党政生产经营 … …

           线分类时要掌握两个原则:唯一性和不交叉性。

        例:公司生产组织结构,如图6-5-1所示。

    图6-5-1  公司生产组织结构

        面分类方法:它主要从面的角度来考虑分类

        面分类的特点:

        柔性好,面上的增、删、改很容易;

        可实现按任意组配面的信息检索,对机器处理有良好的适应性;

        缺点是不易直观识别,不便于记忆。


    系统设计报告

        系统设计阶段的成果是系统设计报告, 其主要是各种设计方案和设计图表,它是下一步系统实现的基础。

    一、系统设计的成果

        系统设计阶段的成果归纳起来一般有 (点击这里观看“各开发环节之间的关系”动画演示)

        1.系统总体结构图(包括总体结构图,子系统结构图,计算机流程图等)。

        2.系统设备配置图(系统设备配置图: 主要是计算机系统图,设备在各生产岗位的分布图,主机、网络、终端联系图等)。

        3.系统分布编码方案(分类方案、编码系统)。

        4.数据库结构图DB的结构,主要指表与表之间的结构,表内部结构(字段、域、数据字典等)。

        5.HIPO(层次化模块控制图、IPO图等等)。

        6.系统详细设计方案说明书

    二、系统设计说明书的组成

    1.引言

     

    (1) 摘要   系统的目标名称和功能等的说明

    (2) 背景

    l 项目开发者

    l 用户

    l 本项目和其它系统或机构的关系和联系

    (3) 系统环境与限制

    l硬件、软件和运行环境方面的限制

    l保密和安全的限制

    l有关系统软件文本

    l有关网络协议标准文本

    (4) 参考资料和专门术语说明

     

    2.系统设计方案 

    (1) 模块设计

    l系统的模块结构图

    l各个模块的IPO图(包括各模块的名称、功能、调用关系、局部数据项和详细的算法说明等)

    (2) 代码设计

    l各类代码的类型、名称、功能、使用范围和使用要求等的设计说明书

    (3) 输入设计

    l输入项目

    输入人员(指出所要求的输入操作人员的水平与技术专长,说明与输入数据有关的接口软件及其来源)

    l主要功能要求(从满足正确、迅速、简单、经济、方便使用者等方面达到要求的说明)

    l输入校验(关于各类输入数据的校验方法的说明)

    (4) 输出设计

    l输出项目

    l输出接受者

    l输出要求(所用设备介质、输出格式、数值范围和精度要求等)

    (5) 文件(数据库)设计说明

    l概述(目标、主要功能)

    l需求规定(精度、有效性、时间要求及其它专门要求)

    l运行环境要求(设备支撑软件,安全保密等要求)

    l逻辑结构设计(有关文件及其记录、数据项的标识、定义、长度和它们之间的关系)

    l物理结构设计(有关文件的存贮要求、访问方法、存贮单位、设计考虑和保密处理等)

    (6) 模型库和方法库设计(本系统所选用的数学模型和方法以及简要说明)

    (7) 安全保密设计

    (8) 物理系统配置方案报告

    l硬件配置设计

    l通信与网络配置设计

    l软件配置设计

    l机房配置设计

    (9) 系统实施方案及说明

    l实施方案

    l实施计划(包括工作任务的分解、进度安排和经费预算)

    l实施方案的审批(说明经过审批的实施方案概况和审批人员的姓名)

    3.案例   

    序号 模块名称 主要用途
    1 无线寻呼管理信息系统-系统设计说明书     研究开发5-10万用户寻呼机管理信息系统,它可以进行普通寻呼服务;漫游寻呼服务;群呼服务;试机服务;定时服务;系统管理;运行管理。 
    2 库存管理系统-系统设计说明书     研发库存控制系统的主要目的:1)为顾客订货提供更好的服务;2)控制库存水平;3)决定向厂家订货的时间和批量。
    3 百货商店业务管理信息系统-系统设计

    实现登记、整理数据,处理核对顾客订货单;向经理提供各种业务统计报表;提供各级查询;销售、采购、会计各部门的业务数据处理实现自动化。

    4 铁道财务会计管理信息系统-系统设计     运用系统的方法以计算机和现代通信技术为基本信息处理手段和工具的,能为全国铁道财务会计核算、管理、决策提供信息服务的人—机系统。
    5 高校选课辅助决策     本选课系统能够使学生在INTERNET上自主、便捷、准确地进行全校性课程选择的一种软件。学生在选择选修课前,可以上网进行查询,当学生输入其学号与密码后,系统便调出其所有相关信息,包括已修课程、已修课程的成绩、专业培养计划、全校性可选课程,系统进行综合分析后,得到一些可行的方案,供选课学生参考,并提出合理建议。
    6 条形材料选材优化     要制造器件,必须先制造一定的零件,而这些零件又由某种原材料截取而得到。例如:用某一种条形材料锯成数种需要的零件,求最少的用料数量。使用<<运筹学>>线性规划的思想和解决方法。

        


    https://blog.csdn.net/aa2397199142/article/details/50686499

    展开全文
  • MES总体介绍

    千次阅读 2013-12-04 20:25:29
    系统目标: MES系统通过控制包括物料、设备、人员、流程指令和设施在内的所有工厂资源,优化...系统总体建设目标如下: 整合可用资源:联接企业的计划层和操作层,整合信息孤岛 优化生产流程:通过项目实施来
    系统目标:

    MES系统通过控制包括物料、设备、人员、流程指令和设施在内的所有工厂资源,优化从定单到产品完成的整个生产活动,以最少的投入生产出最优的产品,实现连续均衡生产。MES系统通过与ERP、DCS系统的全面集成,为企业搭建一个生产制造集成平台,实现对生产全过程的管理。

    系统总体建设目标如下:

    • 整合可用资源:联接企业的计划层和操作层,整合信息孤岛
    • 优化生产流程:通过项目实施来梳理、优化现行生产业务流程
    • 完善管理手段:将制造过程中的生产计划、进度安排、物料流动、物料跟踪、过程控制、过程监视、质量管理、设备维护等活动全面集成起来,有机协调这些活动的执行,使制造过程朝着高效方向发展;
    • 掌握生产现状:让生产现场透明化;
    • 提供评价依据:收集、整理生产过程中的各类数据,为管理人员提供评价依据;
    • 指出改进方向:提供科学、灵活的分析评价工具,以指出改进生产过程的方向。
    1. 管理目标

    • 生产执行系统项目实施,是实现生产过程中的组织、管理和决策的最优化,最终达到企业整体水平的最优化,使从计划、生产、调度、资源分配等管理更加科学、准确。
    • 实现生产过程的快速反应与敏捷、精确制造,最终与业务系统、生产自动化系统集成,实现全厂供应链的快速反应。
    • 实现工厂自动化连续化均衡生产。
    • 实现生产过程中的产品生产交货期的准确预估,最终与业务系统、生产自动化系统集成,实现对客户的产品交货期的准确预估。
    • 实现产品质量以及生产过程的可追溯性。
    • 实现生产过程产量、消耗、质量、设备状况、产品跟踪和技术性分析等的全面动态可视和可控。
    • 实现生产过程中的实时事务处理功能以及统计分析功能。
    • 建立预警指标,提供预警功能(包括设备、质量、物流等);提供调度方案供调度人员决策。
    1. 技术目标

    • 清晰划分企业运营管理与企业生产执行作业两个不同层次的功能模块,二者相互独立而又有机集成。
    • 紧密集成原本独立的系统,消除信息孤岛,保证数据的一致性,提高数据的可复用性,实现各职能部门之间的数据共享与流通。
    1. 应用目标

    MES系统重点关注生产管理、设备维护、质量管理和物料库存管理等四个层面的业务活动,下面分别从这几方面来阐述其应用目标:

    • 生产实时指挥调度
    1. 以全厂数据采集为基础,建立一个集成统一的生产指挥调度平台,有机集成卷包、制丝、动能、物流等相对独立的生产环节,提高各系统各部门间协调指挥的能力,使生产过程数字化、透明化;
    2. 建立预警指标,提供预警功能(包括设备、质量、物流等),提高异常事件的快速处理能力;
    3. 运用先进的高级排产算法进行生产优化排产,实现精益化生产,体现生产过程的快速反应与敏捷制造的能力,保障生产的连续性、可控性;
    4. 有效支撑"敏捷制造、按单生产"的生产管理模式。实现生产过程中的产品交货期的准确预估;快速响应和处理紧急插单,以满足不断变化的市场需求。
    • 全程设备管理
    1. 强化和规范设备基础管理,按照ISO9000的要求,实现设备基础管理(点检、保养、维修、润滑、计量等)的程序化、电算化;
    2. 通过设备的安全运行情况和故障隐患维护情况,不断完善设备维保项目和周期,逐步建立一套良好的设备预防维修机制,进行有针对性的计划维修,提高设备的保障能力;
    3. 通过对员工工作记录的统计分析,加强对人的行为的管理,提高工作质量,提高员工管理考评的科学性、客观性;
    4. 规范故障维修管理,逐步建立一套能指导设备维修的维修经验支持系统,加快故障抢修的速度,减少维修时间,提高维保技能;
    5. 通过对各种设备数据的分析研究,发现影响设备效率的关键因素,并针对具体原因找出提高设备效率的途径,不断提高设备的生产效率。
    • 全面质量管理
    1. 通过对标准的参数化、程序化,建立一套完整的生产过程质量标准体系,为生产过程严格执行质量标准和工艺标准提供保障;
    2. 建立一套全面的生产过程质量检验检测管理体系,迅速监测和分析半成品、成品的质量问题,加快质量异常事件的处理速度;
    3. 运用SPC等工具加强在线质量控制,使质量管理模式由事后考核逐步过渡到预防为主、实时控制的模式;
    4. 提供质量问题的分析工具,为改进工艺、改进质量的研究活动提供有效手段和信息,为正确制订质量标准和工艺要求提供依据与工具,实现产品质量的持续改进。
    • 全程生产追踪

    以批次为单位,通过对原料、辅料、制造工艺参数、成本、质量、设备运行、能源消耗及人员等生产过程各种资源信息的动态记录,建立对应到最终产品与构成要素之间的双向视图,实现产品质量、物料、人员等信息的可回溯性。

    • 全面信息集成

    通过MES系统的实施,实现烟厂各信息化系统、各自动化系统之间的全面信息集成,彻底消除制造各环节间的信息孤岛,实现计划层、执行层及控制层之间无缝的衔接。

    • 生产数据管理
    1. 在与各自动化系统信息集成的基础上建立生产数据中心,实现各种生产管理数据的汇总统计、报表打印等功能,实现生产管理数字化、电算化,提高生产管理效率;
    2. 为领导决策提供全面准确的数据依据。
    1. 业务模型

    MES生产管理平台基于国家局MES规范,ISA95标准,企业管理要求为基础构建业务模型,MES系统总体结构模型如下图所示:

    其主要内容有:

    • 以设备为基础
    • 以计划为导向
    • 撑控生产过程
    • 敏捷指挥调度
    • 强化质量控制
    • 制造成本透明
    • 提升管控能力
    • 管理效益增值

     

    1.  
    2.  
    3.  
      1.  
      2.  
      3.  
        1. MES在企业信息化中的定位

    MES系统在烟草行业信息系统结构中承上启下,是企业信息化建设中不可或缺的关键一环。下面分别从层次、功能和信息等三方面来阐述MES系统在企业信息化中的地位。

    1. 层次定位

    在企业信息化建设中,MES处于计划层与控制层之间,承上启下,是ERP与DCS系统之间的信息纽带。MES通过与ERP、自动化控制系统的协同,实现从定单到成品入库全过程的自动化。

    1. 功能定位

    当前,卷烟厂企业的主要任务就是生产,就是在完成中烟下达的生产任务的过程中确保生产质量最优,用最少的投入实现连续均衡生产。因此,MES是卷烟厂生产厂的信息化核心和主体,MES系统要紧紧围绕"服务于工厂、服务于生产"、"降低生产成本、提高产品质量"的目标来展开,通过控制包括物料、设备、人员、流程指令和设施在内的所有工厂资源来提高制造竞争力,提供了一种系统地在统一平台上集成诸如质量控制、文档管理、生产调度等功能的方式,实现制造数字化。

    1. 信息定位

    在信息方面,MES作为面向制造的系统,与上层管理信息系统(ERP、NC、SCM等)以及低层控制系统有着密切的关系,MES在其中起到了信息集线器(Information Hub)的作用。

    1. MES的边界定义

    根据ISA-95标准,MES重点关注以下四类业务:

    • 生产作业管理
    • 维护作业管理
    • 质量作业管理
    • 库存作业管理

    ISA-95标准定义了MES的边界,如下图所示:

    ISA-95标准对MES边界的定义,是作为MES边界定义的基础和指导。MES系统功能划分和边界定义应遵循以下原则:

    1. 安全性原则:在系统设计上考虑整体的安全措施,使用业界技术成熟的产品,采用安全可靠的系统架构,利用完善的安全策略保证信息的安全可靠。
    2. 先进性原则:选用业界领先和主流的成熟可靠的技术路线和产品,既要着眼于目前系统的需求,还要面向未来的发展。
    3. 可靠性原则:系统每天都处理着大量的业务数据,任何时刻的系统设备故障都有可能给用户带来损失,这要求系统具备很高的稳定性和可靠性,以及很高的平均无故障率。保证故障发生时系统能够提供有效的失效转移或者快速恢复等性能。硬件环境应消除单点故障,实现双机容错和负载均衡功能。保证系统的高可用性,即7×24小时不停机的工作模式。
    4. 实用性及可扩展性原则:系统的建设既要充分体现系统业务的特点,也要具有可扩展性以适应公司管理水平的提升;充分利用现有资源,合理配置系统软硬件,保护用户投资;又要着眼建成后实际的使用与未来技术发展方向,系统应对企业组织架构和业务流程的变动具备低敏感性和优秀的支持性能,企业组织机构或业务流程发生变动时,系统如需变更,应变手段应简单易行。在下面的条件发生变化时,系统可以平滑升级,达到好的可扩展性。
    5. 可维护性、界面及易用性原则:流程管理和表单定义要求简单、明确,操作简便;人员组织和角色管理要求管理简单、明确;权限管理要求对应用模块、查看、记录、操作等各级权限管理简单、明确;用户操作界面要求友好透明。
    6. 可建设性原则:投标人需要提供适应本项目信息系统的硬件和网络建设方案,既要考虑达到本项目信息系统运行最优化要求,又要考虑到建设资金和建设周期的合理性。
    7. 系统集成性:系统设计应与现有的信息化系统及外部系统有良好的集成。

      MES系统架构 
        1. 系统逻辑架构

    我们以SOA为系统技术架构、以ISA 95标准为MES业务架构,构建MES系统。多层的技术架构同时支持WEB与传统应用模式(C/S),如下图所示:

    1. 系统软件架构

    MES系统软件架构如下图所示:

    根据我们多年MES实施的经验,MES应用可以分成两类:

    • 生产管理:各种业务管理,如计划、质量、设备维护等,多是人工数据;
    • 生产过程管理:使用采集数据,数据量大,来自控制系统集成
    1. 企业模型

    企业模型是基于ISA-95的企业层次模型,工厂中的所有生产单元将会被分为五个层次:企业(Enterprise,中烟公司)、卷烟企业(Site,烟草有限责任公司)、制造部(Area、卷烟厂)、工作中心(Work center,生产线)、工段和设备(Work unit)。

    企业层次模型如下图所示:

    展开全文
  • 用样本估计总体

    千次阅读 2019-02-12 17:50:00
    频率分布折线图和总体密度曲线 茎叶图 利用茎叶图既可以对数据的平均值和方差做定量计算,也可以根据样本数据的分散与集中程度对数据的平均值和方差做定性分析。 二、相关计算 样本数据的数字...

    前言

    本小节中的细小知识点很多,需要认真学习,仔细体会。

    一、基础知识梳理

    频数分布表,频率分布表

    注意公式及其变形应用,\(频率=\cfrac{频数}{样本容量}\)\(频数=频率\times 样本容量\)

    频率分布折线图和总体密度曲线

    茎叶图

    利用茎叶图既可以对数据的平均值和方差做定量计算,也可以根据样本数据的分散与集中程度对数据的平均值和方差做定性分析。

    二、相关计算

    样本数据的数字特征计算:

    比如给定一组样本数据\(2,2,4,4,4\)

    则①众数为4;②中位数为4;

    ③平均数为\(\bar{x}=\cfrac{2+2+4+4+4}{5}=2\times \cfrac{2}{5}+4\times \cfrac{3}{5}\)

    数据与其对应的频率乘积,再求和;

    ④方差为\(s^2=\cfrac{1}{5}[(2-3.2)^2\times 2+(4-3.2)^2\times 3]=(2-3.2)^2\times \cfrac{2}{5}+(4-3.2)^2\times \cfrac{3}{5}\)

    数据与平均值的差的平方与频率乘积,再求和;

    ⑤标准差\(s=\sqrt{(2-3.2)^2\times \cfrac{2}{5}+(4-3.2)^2\times \cfrac{3}{5}}\)

    频率分布直方图中的数字特征的计算

    当一组数据经过加工整理成频率分布直方图后,数据信息会有所损失,所以计算数据的数字特征有一定的难度。

    ①众数:直方图中最高矩形的中点横坐标;

    ②中位数:频率分布直方图频率和(面积和)的一半处所对应的横坐标,即面积等分线所对应的横坐标;

    ③平均数:每个矩形的分组的中点值乘以每个对应矩形的面积再求和;

    ④方差:每个矩形的分组的中点值与平均值的差的平方与频率乘积,再求和;

    ⑤标准差:方差的算术平方根;

    用样本估计总体的两层含义

    ①用样本的频率分布估计总体的频率分布;

    ②用样本的基本数字特征估计总体的基本数字特征;

    频率分布直方图的特点

    ①直方图中相邻两横坐标之差表示组距,纵轴表示\(\cfrac{频率}{组距}\)\(频率=\cfrac{频率}{组距}\times 组距\)

    ②频率分布直方图中各小长方形的面积(频率)之和为\(1\),各小长方形高之比也就是频率比。

    ③频率分布表和频率分布直方图是一组数据频率分别的两种形式,前者准确,后者直观。

    平均数的计算技巧

    比如计算数据\(515,521,527,531,532,536,543,548,558,559\)的平均数。

    \(\bar{x}=500+\cfrac{15+21+27+31+32+36+43+48+58+59}{10}=537\)

    \(\bar{x}=540+\cfrac{-25-19-13-9-8-4+3+8+18+19}{10}=540+\cfrac{-30}{10}=537\)

    给定频数分布表求平均数

    思路一:每个矩形的分组的中点值乘以频数再求和,最后除以样本容量;思路二:转化为频率分布表再计算;

    分组 15~25 25~35 35~45 45~55 55~65
    频数 \(5\) \(5\) \(25\) \(15\) \(10\)
    频率 \(\cfrac{5}{60}\) \(\cfrac{5}{60}\) \(\cfrac{25}{60}\) \(\cfrac{15}{60}\) \(\cfrac{10}{60}\)

    如上表,\(\bar{x}=\cfrac{20\times 5+30\times 5+40\times 25+50\times 15+60\times 10}{60}\)

    \(=20\times \cfrac{5}{60}+30\times \cfrac{5}{60}+40\times \cfrac{25}{60}+50\times \cfrac{15}{60}+60\times \cfrac{10}{60}\)

    给定频率分布表求平均数:

    如果数据\(x_1\)\(x_2\)\(\cdots\)\(x_n\)在样本中各自出现的频率分别是\(p_1\)\(p_2\)\(\cdots\)\(p_n\),则\(\bar{x}\) \(=x_1p_1\) \(+x_2p_2\) \(+\cdots+\) \(x_np_n\);在频率分布直方图中,\(x_i\)通常取其所在组的中间值。

    三、数字特征的性质推广

    平均数、方差、标准差的性质推广

    如果一组样本数据\(x_1\)\(x_2\)\(\cdots\)\(x_n\),其平均数为\(\bar{x}\),方差为\(s^2\),标准差为\(s\)

    则样本数据\(ax_1+b\)\(ax_2+b\)\(\cdots\)\(ax_n+b\),其平均数为\(a\bar{x}+b\),方差为\(a^2\cdot s^2\),标准差为\(a\cdot s\)

    四、典例剖析

    例1【2015\(\cdot\)安徽卷】

    若样本数据\(x_1,x_2,\cdots,x_{10}\)的标准差为\(8\),则数据\(2x_1-1,2x_2-1,\cdots,2x_{10}-1\)的标准差为【 】

    $A.8$ $B.15$ $C.16$ $D.32$

    分析:原样本数据的相关数字特征如下:

    \(x_1,x_2,\cdots,x_{10}\)的平均数为\(\bar{x}=\cfrac{x_1+x_2+\cdots+x_{10}}{10}\)

    其方差为\(s_1^2=\cfrac{1}{10}[(x_1-\bar{x})^2+(x_2-\bar{x})^2+\cdots+(x_{10}-\bar{x})^2]\)

    其标准差为\(s_1=\sqrt{\cfrac{1}{10}[(x_1-\bar{x})^2+(x_2-\bar{x})^2+\cdots+(x_{10}-\bar{x})^2]}=8\)

    则新样本数据的相关数字特征如下:

    \(2x_1-1,2x_2-1,\cdots,2x_{10}-1\)的平均数为

    \(\bar{x'}=\cfrac{(2x_1-1)+(2x_2-1)+\cdots+(2x_{10}-1)}{10}=2\bar{x}-1\)

    【引申】

    ①如果数据\(x_1\)\(x_2\)\(\cdots\)\(x_n\)的平均数为\(\bar{x}\),则数据\(ax_1+b\)\(ax_2+b\)\(\cdots\)\(ax_n+b\)的平均数为\(a\bar{x}+b\)

    其方差为\(s_2^2=\cfrac{1}{10}[(2x_1-1-\bar{x'})^2+(2x_2-1-\bar{x'})^2+\cdots+(2x_{10}-1-\bar{x'})^2]\)

    \(=\cfrac{2^2}{10}[(x_1-\bar{x})^2+(x_2-\bar{x})^2+\cdots+(x_{10}-\bar{x})^2]=2^2\cdot s_1^2\)

    【引申】

    ②如果数据\(x_1\)\(x_2\)\(\cdots\)\(x_n\)的方差为\(s^2\),则数据\(ax_1+b\)\(ax_2+b\)\(\cdots\)\(ax_n+b\)的方差为\(a^2\cdot s^2\)

    其标准差为\(s_2=\sqrt{\cfrac{1}{10}[(2x_1-1-\bar{x'})^2+(2x_2-1-\bar{x'})^2+\cdots+(2x_{10}-1-\bar{x'})^2]}\)

    \(=\sqrt{\cfrac{1}{10}[(2x_1-2\bar{x})^2+(2x_2-2\bar{x})^2+\cdots+(2x_{10}-2\bar{x})^2]}\)

    \(=\sqrt{\cfrac{2^2}{10}[(x_1-\bar{x})^2+(x_2-\bar{x})^2+\cdots+(x_{10}-\bar{x})^2]}\)

    \(=2\sqrt{\cfrac{1}{10}[(x_1-\bar{x})^2+(x_2-\bar{x})^2+\cdots+(x_{10}-\bar{x})^2]}\)

    \(=2\cdot s_1=2\times8=16\),故选\(C\)

    【引申】

    ③如果数据\(x_1\)\(x_2\)\(\cdots\)\(x_n\)的标准差为\(s\),则数据\(ax_1+b\)\(ax_2+b\)\(\cdots\)\(ax_n+b\)的标准差为\(a\cdot s\)

    例1-1【2018\(\cdot\)石家庄质检】

    设样本数据\(x_1\)\(x_2\)\(\cdots\)\(x_{2018}\)的方差是4,若\(y_i=2x_i-1(i=1,2,\cdots,2018)\),则\(y_1\)\(y_2\)\(\cdots\)\(y_{2018}\)的方差是____________。

    分析:其方差为\(s^2=2^2\cdot 4=16\)

    例2【2017高考真题卷Ⅱ文科19题改编】【题文】如右图所示,求该频率分布直方图的众数、中位数、平均数、方差。

    992978-20170703234916909-113054221.jpg

    考点:频率分布直方图,众数、中位数、平均数、方差

    分析:以上图为例,

    • 求众数:

    “旧养殖法”的众数为\(47.5\);“新养殖法”的众数为\(52.5\)

    • 求中位数:

    “旧养殖法”的中位数先判断其大概位置,由于\(25-50\)之间的面积和为\(0.62\),25-45之间的面积和为\(0.42\)

    故中位数一定位于\(45-50\)之间,设中位数为\(x\),则\(0.42+(x-45)\times0.04=0.50\),求得\(x=47\),即中位数为\(47\)

    • 求平均数:比如“旧养殖法”的平均数的计算

    \(\bar{x}=27.5\times5\times0.012+32.5\times5\times0.014+37.5\times5\times0.024\)

    \(+42.5\times5\times0.034+47.5\times5\times0.040+52.5\times5\times0.032\)

    \(+57.5\times5\times0.020+62.5\times5\times0.012+67.5\times5\times0.012\)

    \(=47.1\)

    “新养殖法”的平均数的计算

    \(\bar{y}=37.5\times5\times0.004+42.5\times5\times0.020+47.5\times5\times0.044\)

    \(+52.5\times5\times0.068+57.5\times5\times0.046\)

    \(+62.5\times5\times0.010+67.5\times5\times0.008\)

    \(=52.35\)

    求方差:比如“新养殖法”的方差计算

    \(S^2=(37.5-52.35)^2\times 0.004\times 5+(42.5-52.35)^2\times 0.020\times 5+(47.5-52.35)^2\times 0.044\times 5\)

    \(+(52.5-52.35)^2\times 0.068\times 5+(57.5-52.35)^2\times 0.046\times 5\)

    \(+(62.5-52.35)^2\times 0.010\times 5+(67.5-52.35)^2\times 0.008\times 5\)

    \(=?\)

    例3【利用条形统计图计算样本数字特征】

    992978-20190213110154232-440076157.jpg

    992978-20190213110157626-1126356146.jpg

    例4【2015高考广东卷】

    992978-20190213110201129-442982157.jpg

    992978-20190213110203984-1751427753.jpg

    992978-20190213110217881-206797983.jpg

    例5【从表格中提取数据并加工整理】

    992978-20190213110224675-2088103293.jpg

    992978-20190213110226280-1774522775.jpg

    992978-20190213110230995-1497002616.jpg

    992978-20190213110233316-1354371145.jpg

    例6【2016高考四川卷】

    992978-20190213111552913-822592342.jpg

    992978-20190213111555031-2141731262.jpg

    992978-20190213111558575-1682050706.jpg

    例7【2014高考全国卷Ⅰ】

    992978-20190213112311470-315956465.jpg

    992978-20190213112318794-266641276.jpg

    992978-20190213112326466-2067346328.jpg

    992978-20190213112326975-839002008.jpg

    例8【2019届高三理科数学课时作业第8题】

    为了考查某校各班参加课外书法小组的人数,从全校随机抽取\(5\)个班级,把每个班级参加该小组的人数作为样本数据。已知样本平均数为7,样本方差为4,且样本数据各不相同,则样本数据中的最大值为【】

    $A.9$ $B.10$ $C.11$ $D.12$

    法1:不妨设这五个数据分别为\(x_1<x_2<x_3<x_4<x_5\),则有\(\cfrac{x_1+x_2+x_3+x_4+x_5}{5}=7\)\(s^2=\cfrac{1}{5}[(x_1-7)^2+(x_2-7)^2+(x_3-7)^2+(x_4-7)^2+(x_5-7)^2]=4\)

    \((x_1-7)^2+(x_2-7)^2+(x_3-7)^2+(x_4-7)^2+(x_5-7)^2=20\)

    很显然当最大数据\(x_5=12\)时,不满足;

    再代入\(x_5=11\),得到\((x_1-7)^2+(x_2-7)^2+(x_3-7)^2+(x_4-7)^2=4\)

    由于样本数据互不相同,这是不可能成立的;

    若样本数据为\(4,6,7,8,10\),代入验证知①②式均成立,

    此时样本数据中的最大值为 10.故答案选\(B\)

    法2:不妨设这五个数据分别为\(x_1<x_2<x_3<x_4<x_5\),则有\(\cfrac{x_1+x_2+x_3+x_4+x_5}{5}=7\)\(s^2=\cfrac{1}{5}[(x_1-7)^2+(x_2-7)^2+(x_3-7)^2+(x_4-7)^2+(x_5-7)^2]=4\)

    \((x_1-7)^2+(x_2-7)^2+(x_3-7)^2+(x_4-7)^2+(x_5-7)^2=20\)

    要使其中一个达到最大,这五个数必须是关于\(0\)对称分布的,就像“最小二乘法”中要求样本点要均匀分布在回归直线的两侧一样,

    \(9+1+0+1+9=20\),也就是\((-3)^2+(-1)^2+0^2+1^2+3^2=20\)

    所以五个班级参加的人数分别为\(4,6,7,8,10\),故最大数字为10。

    例9【2019届高三理科数学课时作业第9题】【涉及逻辑推理】

    气象意义上从春季进入夏季的标志为“连续5天的日平均气温均不低于\(22^{\circ}C\)”。现有甲、乙、丙三地连续5天的日平均气温的记录数据(数据都是正整数,单位:\(^{\circ}C\))

    ①甲地:5个数据的中位数为24,众数为22;

    ②乙地:5个数据的中位数为27,均值为24;

    ③丙地:5个数据中有一个是32,均值为26,方差为10.8;

    则满足进入夏季标志的地区有【】个。

    $A.0$ $B.1$ $C.2$ $D.3$

    分析:对甲地而言,由于中位数为24,众数为22;故可以将适合题意的5个数据由小到大排序为22,22,24,25,26;其中前三个数据不能变化,后两个数据可以变化,但其必须都大于24,且不能相同,故甲地的数据满足进入夏季的条件;

    对乙地而言,由于中位数为27,均值为24;故可以将适合题意的5个数据由小到大排序为18,19,27,28,28;显然其不满足进入夏季的条件;

    对丙地而言,不妨设32为最大的数据,由于均值为26,故尝试5个数据为22,22,22,22,32;计算得到均值为24,那么前四个数据中若有小于22的,均值会小于24,故我们调整前4个数据,显然都应该大于22,此时如我们调整的恰当,必然会得到其均值为26,方差为10.8;故丙地的数据也满足进入夏季的条件;

    综上所述,满足进入夏季标志的地区有2个,故选\(C\)

    转载于:https://www.cnblogs.com/wanghai0666/p/10366239.html

    展开全文
  • 由于随机抽样的偶然因素使样本各单位的结构不足以代表总体单位的结构,而引起抽样指标和全局指标的绝对离差。 2、样本均数的抽样分布特点 各样本均数未必等于总体均数 样本均数之间存在差异(可以利用这一点来...
  • 国家电网公司开发计量...同时,计量生产运行系统建设有生产分析和生产监控模块,负责对计量装置的生产、调度全过程进行监控,并提取历史业务数据、统一汇总所有供电单位的用表需求,根据各项需求的具体情况进行智能分
  • 应用集成与数据集成建设总体思路

    万次阅读 2010-07-19 11:06:00
    应用集成与数据集成建设总体思路 <!-- @page { size: 21cm 29.7cm; margin: 2cm } H3 { margin-top: 0.46cm; margin-bottom: 0.46cm; line-height: 172%; page-break-inside: avoid; page-...
  • 大数据应用之双色球算奖平台总体设计历史数据存储篇 作者:张子良 版权所有,转载请注明出处 1.1 引子:文件OR数据库  历史期次的双色球选注数据的存储,采用什么样的格式比较好呢?这需要重点从三个方面考虑,...
  • 能优化后使之在特定的功能应用中达到最佳的效果,网络组建单位在购得设备后,无需用户专门进行配 置,即买即用,方便快捷,性能价格比高。  (2)网络服务器从主机硬件角度的分类  从主机硬件角度看,网络...
  • Python中进程和线程总体区别

    千次阅读 2017-04-26 21:50:54
    Python中进程和线程的总体区别: 一个线程指的是进程中一个单一顺序的控制流。 一个进程中可以并发多条线程,每条线程并行执行不同的任务。
  • 智慧城市总体方案解读

    千次阅读 2012-04-11 09:08:02
    2007年我国石油、天然气的人均储量分别只有世界人均水平的7.35%和7.13%,而2006年我国单位GDP能耗则是 日本 的5.5倍,美国的3.7倍。最近的一项调查显示,到2009年底 北京 市常住人口已达1972万人,人均水资源占有量...
  • OpenLayer源代码总体结构分析

    千次阅读 2012-10-07 23:29:37
    OpenLayer源代码总体结构分析    通过前面的项目介绍,我们大概已经知道 Openlayers是什么,能够做什么,有什么意义。接下来我们分析它怎么样,以及怎样实现的等问题。  这个图是从它的文档上截取的,...
  • zz 系统总体结构设计

    千次阅读 2010-05-19 09:21:00
     计算机处理方式可以根据系统功能,业务处理特点,性能/价格比等因素,选择批处理、联机实时处理、联机成批处理、分布式处理等方式。在一个管理信息系统中,也可以混合使用各种方式。 3、计算机网络系统的设计 ...
  •  YARN总体上仍然是Master/Slave结构。在整个资源管理框架中,ResourceManager为Master,NodeManager为Slave,并通过HA方案实现了ResourceManager的高可用。ResourceManager负责对各个NodeManager上的资源进行统一...
  • JVM系列(一) - JVM总体概述

    千次阅读 2018-08-23 14:33:07
    单位读取 Java 字节码。它就像一个 CPU 一样,一条一条地执行 机器指令 。每个字节码指令都由一个1字节的 操作码 和附加的 操作数 组成。 执行引擎 取得一个 操作码 ,然后根据 操作数 来执行任务,完成后就...
  • 新核心系统的特点 基于以客户为中心的架构,提供全面、适合不同客户类型的客户信息,并实现统一的客户视图 提供标准化、产业化的功能和流程支持 通过产品和费率配置的功能,使产品管理得以参数化和标准化,并...
  • 以玉皇山南基金小镇为例,该小镇根据金融人才国际化、精英型的特点,坚持市场化运作、产业链招商、生态圈建设的模式,通过联合政府性行业组织、龙头企业和知名中介,开展海内外招商及合作业务,快速推动私募金融集聚...
  • R 语言 语法特点

    千次阅读 2016-09-05 11:40:39
    表示生成为3阶的单位矩阵 (5)、函数rnorm() rnorm() 函数表示以正太分布的形式产生随机数 (6)、solve() solve() 函数表示求逆矩阵 而且 solve() 函数可以解方程组 (觉得高数还...
  • 最近花了很多时间在重构和进一步提炼Winform开发框架的工作上,加上时不时有一些项目的开发工作,我博客里面介绍Web开发框架的文章比较少,其实以前在单位工作,80%的时间是做Web开发的,很早就形成了自己的一套Web...
  • 常见音频文件格式的特点

    千次阅读 2014-01-15 12:21:23
    常见音频文件格式的特点。 http://www.360doc.com/content/11/1125/18/8050095_167351161.shtml    要在计算机内播放或是处理音频文件,也就是要对声音文件进行数、模转换,这个过程同样由采样...
  • 综合考虑受访组织的特点,构建一个虚构组织。 ·   为 SharePoint 2010 的实施构建通用的财务架构。 访谈要点 此次调研对 Microsoft 的以下客户组织进行了访谈: 1.   一家跨国食品公司。 2. ...
  • 支持故障转移,但是它具有其独特的特点: 多个用户数据库可以一同进行故障转移。这对要同时使用多个用户数据库的应用,例如 Microsoft SharePoint ,会很有帮助。 提供一个虚拟的服务器网络名,无论哪个...
  • 中国地图和地方特点介绍

    万次阅读 2013-10-10 16:41:11
     31、中国共有34个省级行政单位,23个省,5个自治区,4个直辖市和2个特别行政区。   32、新疆维吾尔族自治区是中国面积最大的省级行政区,它位于中国的西北部,其人民政府所在地是乌鲁木齐市,简称为“新”。 ...
  • 1、体积小、速度快、总体拥有成本低,开源; 2、支持多种操作系统; 3、是开源数据库,提供的接口支持多种语言连接操作; 4、MySQL的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务...
  • 摘要:负载均衡作为提高网站性能的主要方式被大多数网站采用,文中概述了现有的负载均衡技术的分类与各自特点。  动态内容按照存在形态可以分为三类。  第一类:内容长时间不需变化,这类内容一般是通过网页静...
  • 内存数据库的技术,一个很重要的特点,是可以对内存中的数据实现全事务处理,这是仅仅把数据以数组等形式放在内存中完全不同的。并且,内存数据库是与应用无关的,显然这种体系结构具有其合理性。内存引擎可以实现...
  • 行业特点影响ERP选型 目前服装企业的供应链有两种模式:一种以制造和生产管理为主的企业。另一种是以品牌管理为主的企业,生产环节大部分或全部外包,形成虚拟供应链。某女装公司是属于制造型企业,公司已经应用了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,291
精华内容 13,716
关键字:

总体单位的特点