正文内容
Unix操作系统
来源:开心麻花
作者:开心麻花
2025-09-19
1

Unix操作系统(精选9篇)

Unix操作系统 第1篇

西南医院HIS中心服务器于2001年由HP-lh4升级为IBM-x360,主服务器4颗CPU,4G内存;操作系统为Windows2000 advanced server,Oracle为8.1.7.4版本;正常业务情况下,连接到服务器的并发会话已超过1200个,活动会话长期在25个左右。

医院计划于2007年5月底启用新的门、急诊大楼,新上门诊排队叫号系统,预计增加客户端200~300个,预测新大楼启用后并发会话可能达到1500个。同时,PACS、体检、心电、手术麻醉等系统也已和HIS系统整合起来,需要和HIS系统频繁交换数据。特别是手术麻醉信息系统,与HIS系统之间的数据交换量达到了1G/日。随着整合的医疗业务越来越多,系统内数据的产生速度也越来越快,住院结算、中心摆药等需要进行大量数据查询并根据查询结果进行大量计算的复杂业务,所需时间越来越长,开始影响医院业务工作的正常开展。为此,医院决定升级HIS中心服务器。升级后的系统必须提供更高的性能和安全性,并能满足三到五年内医院业务增长的需要。

升级后的系统,要求能在独占模式下支持至少4000并发用户,并且在2000并发用户时,能提供较高性能。由于很难测试新门、急诊大楼启用后增加大量并发用户对系统性能的影响,在当前用户数下,升级后的系统性能要比现有系统有较大提升,如住院结算、中心摆药等复杂业务的处理时间应缩短至少一半。并且在业务高峰期,CPU使用率应平均在40%以下,空闲内存应平均在20%以上。这样才能在新门、急诊大楼启用后,不会对系统性能造成太大影响。

升级后的系统同时必须具备良好的扩展性,通过简单的硬件扩展,就能在4000并发用户数时,提供较好性能。

由于Oracle数据库最新版本已经是10.2.0,而且Oracle已经放弃对8.1.7版本数据库的商业技术支持,在升级服务器硬件的同时,医院也决定将Oracle数据库升级。

1 系统测试及设备选型

升级服务器,通常有两种升级方式:在原有系统上进行扩展和购买全新服务器。

当前的PC Server为32位体系结构,只能运行32位操作系统。由于寻址能力限制,在32位Windows操作系统下,Oracle数据库通常只能使用1.7G内存。即使采用Windows提供的3G参数配置操作系统,Oracle数据库也最多能使用不到3G的内存。而且Oracle在Windows平台下采用单进程技术,在Oracle体系结构中的后台进程和为每个数据库用户服务的服务进程,在Windows平台下都采用线程来实现。这样带来的后果是无论实际物理内存有多少,Oracle数据库所能使用的内存都不可能超过3G。而根据Oracle所采用的处理机制,每一个连接到数据库的用户,都会使用少量的私有内存来存放用户的私有信息。在Oracle只能使用有限内存的情况下,系统支持的并发用户受到限制。

当Oracle数据库运行在独占模式下,也就是Oracle为每一个连接到数据库的用户分配一个服务进程时,在不过多的减少数据缓存和共享池的大小以降低性能的情况下,32位Windows平台下的Oracle数据库最多能同时连接800个用户左右。

当Oracle数据库运行在共享模式下,也就是Oracle运行指定数量的服务进程,这些服务进程同时为所有连接到数据库的用户服务时,32位Windows平台下的Oracle数据库理论上可以支撑3000以上的并发用户。但在实际运行中,发现共享模式性能较独占模式低且不是很稳定,在出现故障后,由于使用这种模式的系统很少,也很难迅速查到有关信息,排除故障。因此,不能选择在原有系统上进行扩展。

在购买全新服务器时,可以有两个选择:64位Windows系统和64位UNIX系统。

尽管我们对Windows很熟悉,但64位的Windows以前没有接触过,不知道64位与32位之间存在哪些差异;对UNIX比较陌生,而且市场上主流UNIX厂商有三家,这三家厂商的产品之间有哪些差异,我们也不是很清楚。同时据我们了解,全军尚未有采用UNIX平台运行HIS系统的医院,无法找到比较合理的对比。在这种情况下,只是根据其它行业的使用评论,或者根据厂商自己的商业宣传就贸然进行选择,不是明智之举。为此,在确定设备之前,我们进行了各系统的实际测试对比。

系统能正常运行是一切改进的前提。因此在进行测试时,首先考虑到数据库版本对应用程序的影响,其次考虑操作系统平台对应用程序的影响,最后考虑操作系统平台对性能的影响。

由于此次升级对系统改动很大,包括操作系统类型、操作系统位数、数据库版本三个方面的改动,如果直接模拟系统升级后的最终状态进行测试,在出现问题时,很难进行分析定位,制定解决措施。因此,我们制定了详细的分步测试计划:

(1)确定升级后的数据库版本:在32位Windows平台上将数据库升级到10g,然后测试应用系统所有模块是否能正常运行,以确定数据库版本。在这一步测试中,相对现有系统,只引入了数据库版本这一个变化,在出现故障时,可以准确定位故障原因,并及时找出解决措施。在我们的实际测试中,发现医保相关程序只能使用7.3客户端,而7.3客户端与10.2.0版本的服务器端不兼容,只能将数据库版本确定为9.2.0。

(2)确定数据库版本后,同时建立64位Windows 2003Server、AIX 5.3、Solaris 10、HP-UX 11.23几个测试环境。

在各环境中分别安装版本为9.2.0的64位数据库,并都打上最新的9.2.0.8补丁,然后测试应用系统所有模块是否能正常运行,确定是否需要为不同系统进行不同参数配置。

(3)在确保各环境下HIS系统都完全正常后,进行性能对比测试。主要测试在独占模式下能支持的最大用户数;单用户情况下运行复杂业务所需时间;并发用户达到1000时运行复杂业务所需时间。

测试的目的是充分了解各厂商产品,以提供选择依据。同时通过测试,尽快熟悉UNIX系统。因此,在每一步测试中,我们都将测试过程尽量分解,并将分解后的测试任务指定到人,确保每一个测试步骤,在医院内部都有人充分了解测试方法和测试结果。

由于对UNIX不熟悉,在测试时,由院方向供应商技术支持工程师详细讲解HIS系统的体系结构、历史运行情况、医院规模、医疗业务运行情况等,再由供应商技术支持工程师根据系统情况,结合各自产品特点,选择他们认为的最优设置,减少由于我们不熟悉UNIX系统带来的测试偏差,以尽量公平公正的测试出各系统的性能数据,提供选择依据。

我们一共邀请了HP、IBM、SUN三家公司参加测试,由于HP公司的安腾服务器既支持64位Windows系统,也支持HP-UX系统,因此64位Windows系统和HP-UX都采用同一套硬件进行测试,在测试完Windows系统后,安装HP-UX系统,重新进行完整测试。

测试完毕后,我们对各系统基本上有了比较直观的了解。

由于任何测试都无法代表真实系统的实际情况,只能是近似估计值;同时在小型机服务器的使用过程中,厂商的服务情况、支持力度也对系统的正常运行起着重要作用。因此,我们并没有完全根据测试结果选择服务器,而是对各服务器公开招标,最终综合考虑供应商实力、服务器性能、产品价格、系统扩展性等因素,选择了HP公司的rx 6600服务器,并决定运行HP-UX操作系统。

在选择HP服务器时,我们也考虑到由于自身对UNIX不是很熟悉,尽管测试很成功,但升级仍然存在失败的可能性。在升级失败的情况下,由于硬件同时支持Windows平台,再切换回Windows系统,最多损失HP-UX操作系统的费用和升级测试花费的时间,而不会造成整套系统的浪费。在大家的共同努力下,虽然最终升级很成功,但我们仍然认为当初的考虑是有必要的。

根据测试结果,对比现有系统负荷情况,我们确定了系统配置为4颗双核心CPU,16G内存,采用64位HP-UX 11.23操作系统,后台数据库为Oracle 9.2.0。系统配置8块容量为146G、转速为1万转/分钟的高速SCSI硬盘作为存储,其中两块配置为RAID1安装系统,5块配置为RAID5容纳系统数据,1 块作为Hot Spare。

2 数据迁移测试

确定服务器型号和数据库版本后,开始确定升级步骤。由于原系统是Windows平台,升级后的系统是UNIX平台,无法采用Oracle自带的Upgrade工具直接升级,只能采用Export/Import的方式迁移数据。同时,HIS系统在非业务高峰期允许短暂的停机时间。从8.1.7采用Export方式导出的数据,无法在9.2.0.8的数据库中采用Full=y的方式导入,但可以采用根据用户导入的方式导入数据。基于此,确定升级流程如图1所示。

其中Data Guard的配置,属于升级后的系统高可用性及系统备份部分,不在本文中多加阐述。

确定升级步骤后,对每一个大步骤进行细化,尽量做到每一实际操作步骤不可再分。对不可再分的操作步骤进行详细测试,同时将所有操作脚本化,减少手工输入的命令,以减少可能发生的错误。

创建脚本时,将所有命令及执行结果、命令开始时间和结束时间都记录在日志文件中,在脚本运行结束后,通过查看日志文件,判断脚本运行结果是否符合预期,并计算脚本所需执行时间。针对日志中记录的任何错误,在查明原因后,都对脚本进行相应修改,并对修改后的脚本进行详细测试,确保万勿一失。

在细化升级步骤这一过程中,主要完成以下工作:

(1)使用dbca工具生成创建数据库的脚本,并根据系统硬件和HIS系统的要求,修改生成的参数文件。

(2)根据现有系统的实际情况生成创建表空间、创建角色和用户并授权、创建同义词的脚本。生成的创建脚本,并不是完全复制现有配置,而是在复制的同时,对现有系统中的不合理配置进行修改。比如在现有系统中,某些用户的缺省表空间和临时表空间为同一表空间,则在生成的创建脚本中,这些用户的缺省表空间不变,临时表空间更改为系统临时表空间。

(3)根据HIS系统的数据结构,创建在现有系统上使用Export工具导出数据的参数文件,并创建包含导出命令的脚本。

(4)创建在升级后系统中使用Import工具导入数据的参数文件,并创建包含导入命令的脚本。

(5)创建切换脚本,在升级全部完成后,将数据库更改为归档模式等。

(6)确定系统升级成功标志和各应用系统升级后的检查项目。

在创建的每个脚本都正确无误后,根据实际情况统筹安排,优化升级步骤,尽量减少系统停机时间。

优化升级步骤时,首先确定所有不可再分的升级步骤之间的独立性,也就是确定每一独立步骤的相互依赖关系。根据依赖关系,确定所有步骤完成时间最少的执行路径。然后根据优化后的执行路径,整合脚本,进行测试,得出合理的近似执行时间。

经过测试优化,最终生成4个按照时间顺序执行的脚本。在实际升级时,只需要按照时间顺序执行这4个脚本即可。

升级脚本全部确定完毕后,再进行两到三次完整的升级测试。每次测试前,都删除密码文件、数据文件、控制文件、在线重做日志文件、参数文件等数据库相关文件,同时删除脚本生成的日志文件。确保在不改动任何脚本的情况下,升级能完全成功。

从确定升级步骤开始,到最终所有脚本确定完毕,一共花了5个工作日进行测试。

升级脚本全部确认完毕后,按照升级流程完整的进行测试升级后,再次进行HIS系统的应用测试,确保系统的所有功能在使用脚本进行升级后都能正常使用。

3 后台应用迁移测试

HIS系统有很多后台应用,包括后台划价、后台日统计、后台月统计、医疗文件系统、PACS等其它系统。每个应用的情况都不相同,在数据库服务器从Windows平台迁移到UNIX平台后,是否能正常工作,是否需要重新配置,都需要进行分析测试。

现有系统中,后台划价、后台日统计、后台月统计都运行在主数据库服务器上,通过Windows操作系统的计划任务功能定时执行,其中后台划价是独立的Windows程序,后台日统计和后台月统计是调用数据库存储过程完成的;医疗文件系统与数据库系统相互独立;PACS等其它系统与HIS系统之间,只通过DB-Link交换数据。

基于此,我们确定升级后的应用迁移方案:

(1)后台划价迁移到其它运行Windows操作系统的服务器,仍然通过操作系统的计划任务功能定时执行,通过修改配置文件的方式使程序连接到升级后的HIS系统;

(2)后台日统计、后台月统计直接通过数据库提供的定时任务功能调用相关存储过程完成;

(3)医疗文件系统保持不变;

(4)PACS等其它系统通过修改DB-Link配置来连接到升级后的HIS系统。

对每一个后台应用,都生成相应的切换文档,明确记录迁移步骤、需要修改哪些配置参数、如何修改。

在数据迁移测试完成后,对每一个后台应用进行迁移测试,并根据测试结果修改切换文档,使应用迁移准确无误。

后台应用的迁移测试,共花了2个工作日。

4 实际升级

所有测试全部完成后,开始进行实际升级迁移的组织协调工作,并申请停机时间4.5个小时。申请时间为实际所需时间的三倍,以保证在升级过程中出现错误时,有充分的时间修正错误,并可以第二次从头开始升级;即使第二次升级失败,还有时间将系统切换为升级前的状态。这样可以确保在4.5小时后,系统一定处于可用状态,有利于其他科室安排工作。

经领导协调,确定系统升级切换时间后,以升级时现有系统的停机时刻为时间基准点,确定每一升级步骤的执行时间点,并形成详细的切换操作文档,以书面形式确认整个升级过程所需要做的每一件事情,并记录所需要的详细命令。在实际切换时,确定执行人和检查人,每一个步骤,都由执行人在检查人的监督下按照文档进行,并由检查人检查确认后,在操作文档上做确认标记。

实际升级的前一天,由已经确定的执行人和检查人,按照正式升级的要求,严格按照升级文档确定的步骤,进行测试升级。一方面检查升级文档的正确性,一方面让执行人和检查人熟悉整个升级过程,避免在实际升级过程中出现错误。在测试过程中发现的升级文档中的任何疏忽和错误,都被书面记录下来,修正升级文档,并重新进行全过程升级测试。测试成功的标志是升级后的系统是可用的。

由于各项测试和准备工作充分、细致,在实际进行升级时,所有升级步骤的执行结果都与测试时相同,整个升级过程没有出现任何错误,时间只花了90分钟。

5 升级后的系统性能

在升级后的一周内,对系统运行情况使用操作系统自带的sar、vmstat、swapinfo、top等工具进行了连续监控。监控结果表明,升级后的性能全面达到或超过了预期目标。

在业务高峰期,并发用户数在1200以上,CPU使用在20%左右,8个CPU核心的负荷差异小于10%,空闲内存在2.5G左右,此时的活动事务,也就是状态为Active的用户在3~5之间。

经测试,当并发用户达到2000时,无页面交换存在,交换分区使用率在1%以下,可以预测当并发用户达到2000时,系统性能不会有明显下降。

系统连续运行一周后,数据库的数据缓存命中率为96%以上,库缓存命中率在95%以上。

在正常业务时间,用户等待事件都为I/O等待及服务器端与客户端之间的通信等待。I/O等待的用户很少,一般间隔几分钟才发生一次,偶尔会发生2个用户同时等待I/O操作的情况,但从未出现3个以上用户同时等待I/O的情况。除了用户异常退出导致锁不能及时释放外,在系统中未发现阻塞其他用户超过5秒的锁。

升级前需要10余秒的中心摆药、住院结算等需要进行大量查询和大量计算的复杂业务,响应时间均在2秒以内,大大超出了升级前的预期目标。

在经历了1个多月的准备和测试后,系统于2007年4月16日成功升级。切换后业务完全连续,切换停机期间的急诊收费数据完全迁移到新系统中。

参考文献

[1]金宁.UNIX&UnixWare7基础教程[M].北京:电子工业出版社,2006.

[2](美)Edward Honour..ORACLE开发人员指南[M].译友翻译组,译.北京:机械工业出版社,1998.

[3]张菊芬,等.我院服务器升级前后的性能分析[J].医疗设备信息,2006(12):18-19.

[4]刘逸敏,等.医院信息系统建设过程中若干问题讨论与对策[J].医疗设备信息,2007(1):35-36.

[5]熊友生.医院网络服务器集成方案[J].医疗设备信息,2007(2):26-27.

[6]易传亮,等.C/S结构HIS系统客户端自动升级技术[J].医疗卫生装备,2007(1):48-49.

[7]葛忠良.数字化医院建设中的非技术因素[J].中国数字医学,2007(4):40-41.

[8]傅德,,等.医院信息系统建设与应用[M].北京:人民军医出版社,2002.

Unix操作系统 第2篇

Unix系统下光盘刻录机的使用

一.CDRTOOLS软件简介

几乎所有的Unix操作系统(如:Solaris、Sun OS、HP-UX、FreeBSD、Linux等)都支持该软件。需要注意的一点是除Linux操作系统外,CDRTOOLS软件只支持SCSI接口的刻录机。CDRTOOLS软件是一组命令集,它包含四个命令:

Mkisofs:用来生成刻录CD所需的映像文件。

Cdda2wav:把audio CD片上的内容卸载到硬盘上生成声音文件。

Cdrecord:把各种各样的声音数据文件刻录到CDR/CDRW光盘上。

Readcd:含读写光盘等功能的菜单式命令。

二.CDRTOOLS软件的获取与安装

CDRTOOLS软件可以从Caldera公司的 上下载ftp://ftp2.caldera.com/pub/skunkware/osr5/fileutil/cdrecord,得到CDRTOOLS软件后,将下载文件cdrtools-1.8a23-VOLS.tar解包到/ tmp/目录,执行命令:# tar xvf /tmp/cdrtools-1.8a 23-VOLS.tar,此时将生成三个文件,其中VOL.000.000文件为Custom格式的可安装文件。

然后以root用户注册,执行custom命令安装该软件,步骤如下:

custom→Software→Install New→From scosysv→Media Device→Media Image→Image Directory:/tmp

此时系统便将CDRTOOLS软件自动安装到/usr/local目录下。

三.CDRTOOLS软件的使用

1.数据光盘的一次性刻录

(1)用mkisofs命令将所要刻录的文件生成映像文件 /tmp/outfile,命令如下:

# mkisofs -L -l -v -r -o /tmp/outfile filename

需要说明的是-r选项的功能是生成Rock Ridge格式的文件。Rock Ridge格式是ISO9660格式的延伸,支持文件名字母的大小写、符号字符、长文件名以及超过8层的目录结构。Rock Ridge使CD-ROM能兼容Unix的文件系统,因此它在Unix系统上已经被广泛地使用。

(2)将生成的映像文件写入CDR/CDRW 光盘,执行命令:

#cdrecord -v dev=0,2,0 /tmp/outfile speed=8

此命令中dev代表刻录机设备,三个数字的含义分别为:第一位表示刻录机字符设备/dev/rcd0;第二位表示刻录机的SCSI ID号;第三位表示设备的LUN号。Speed表示写入速度。

(3)查看光盘上的内容,执行命令:

#mount -r -f HS /dev/cd0 /mnt

这样就可以对 /mnt进行各种操作:ls、cp等。

上述方法实现的是光盘的一次性写入,写入后光盘将不能再追加其他内容。

2.光盘的追加刻录

第一次写入时执行下列命令:

#mkisofs -L -l -v -r -o /tmp/firstimage

生成映像文件 firstimage.

#cdrecord -v dev=0,2,0 -multi -data firstimage speed=8

将映像文件写入CDR/CDRW光盘,此命令中的multi选项表示可以追加写入。

第二次写入时执行下列命令:

#cdrecord msinfo

系统将输出类似这样的信息:0,23456,表示上一次写入的数据所占用的空间。

#mkisofs -L -l -v -r -C xx, yy -o /tmp/secondimage

生成映像文件secondimage, xxy、yy即是上一步所得到的值。

#cdrecord -v dev=0,2,0 -multi -data secondimage speed=8

将映像文件写入CDR/CDRW光盘。如果不想再向此光盘中追加其他的文件,则该命令中的multi 选项可以省略。

查看所刻录的内容,执行命令:

#mount -r -f HS /dev/cd0 /mnt

进入/mnt目录可以查看光盘的内容,

特别值得提到的是,由于SCO OpenServer操作系统的限制,此时仅仅能够看到第一次写入的内容,对于后来追加的内容则看不到。若想看到全部内容,可将此光盘放入Windows平台的计算机上,此时就可以看到全部内容了,这不能不说是一个不小的缺憾。

3.数据盘的整盘复制

(1)读入源盘内容,生成映像文件 /tmp/disk.out执行命令:

#readcd

0:read 1:veri 2:erase 3:read buffer 4:cache 5vtime 6:cap 7:wne 8:floppy 9:verify 10:checkcnds 11:read disk 12:write disk 13:scsireset 14:seektest 15:readda

执行以下步骤(以下是一个实例)

Enter selection: 0(0 - 15)/:11

Capacity:87223 Blocks = 174446 kBytes = 170 Mbytes = 178 prMB

Sectorsize: 2048 Bytes

Copy from SCSI (0,2,0) disk to file

Enter filename [disk.out]: /tmp/disk.out

Enter starting sector for copy: 0(0-87222)/:

Enter number of sectors to copy: 87223 (1- 87223)/:87221

此处需特别注意,为防止读盘时扇区越界,输入的扇区数应是系统提供的扇区数减2。

(2)将生成的映像文件/tmp/disk.out写入目标盘,执行命令。

#cdrecord -v dev=0,2,0 /tmp/disk.out speed=8 即可刻录生成相应的目标盘。

4.CDRW光盘的格式化

执行命令:

#cdrecord -v dev=0,2,0 black=fast

将CDRW光盘快速格式化。它仅删除PMA、TOC、pregap,所需时间很短。

执行命令:

#cdrecord -v dev=0,2,0 blank=all

将CDRW光盘完全格式化,所需时间较长。

四、注意事项

在CDRTOOLS的使用中,还有一些问题需要注意:

1. 为方便查阅联机文档,可修改/etc/default/man文件,将第17行MANPATH=scohelp:/usr/man改为MANPATH=scohelp:/usr/man:/usr/local/man。

2. 若执行命令:

#chmod 6755 /usr/local/bin/cdrecord

使普通用户也可以执行刻录操作命令。

3. 为方便命令的使用,可将/usr/local/bin加入到PATH变量中。

4. 使用此软件时可能会感到频繁敲入命令比较烦琐,可将上述命令编辑到一个shell程序中,使用起来就方便了。

CDRTOOLS软件有着丰富的功能,这里不能详述,更多的用法可参阅联机文档。通过使用该软件,我们不但可以建立起可靠的文件备份系统,而且对与光盘刻录相关的知识将有更系统、完整的学习和认识。

作者:(CWW 02.8.5 李建国文)

llc107 回复于:-06-20 14:44:17这个软件是免费的吗?

中国UNIX用户协会 回复于:2003-06-20 14:46:46CDRTOOLS软件可以从Caldera公司的 上下载ftp://ftp2.caldera.com/pub/skunkware/osr5/fileutil/cdrecord,得到CDRTOOLS软件后,将下载文件cdrtools-1.8a23-VOLS.tar解包到/ tmp/目录,执行命令:# tar xvf /tmp/cdrtools-1.8a 23-VOLS.tar,此时将生成三个文件,其中VOL.000.000文件为Custom格式的可安装文件。

chenhawk 回复于:2003-06-20 15:09:53FT,SCSI CD-RW!No Money!

johnyou 回复于:2003-06-20 18:04:30SUN的SOLARIS中有cdrw也能实现。9自带。8在另一个光盘里。

败亡者 回复于:2003-06-20 20:45:31恩 好 不 错哦

Unix操作系统 第3篇

关键词:UNIX服务器,监控系统,构架,实现

1 UNIX系统监控介绍

在UNIX操作系统中,主要包括中央处理机即CPU、内存即memory、磁盘空间以及网络带宽等几种关键资源。为此,在多进程中,UNIX系统所需要监控的参数有CPU用户状态使用率、CPU等待I/O状态使用率、CPU系统状态使用率、CPU空闲状态、上下文交换状况、中断状况、系统调用状况等;在虚拟内存系统中,UNIX系统所需要监控的参数有空闲物理内存的状况、交换区的使用状况等;在文件系统中,UNIX系统所需要监控的参数有文件系统空闲空间状况、文件系统mode空闲状况等。UNIX系统中其他需要监控的参数还包括网络带宽和操作系统本身的状态。

shell命令采集方法UNIX操作系统都提供了shell命令来查看系统信息和执行脚本,因此shell命令采集方法实现简单,且不存在任何不兼容问题,这是目前许多监控系统所采用的方法。shell命令采集方法的过程如下:(1)DCU向被监控机操作系统传递shell命令;(2)被监控机操作系统返回shell命令执行的结果;(3)DCU解析返回的执行结果;(4)判断是否还有监控信息需要获取,是,则重复步骤(1H3),否则结束。

UNIX操作系统在Gnome(GUN Network Object Model Environment,GUN网络对象模型环境)下提供了Glibtop库。安装完成后在/user/include下产生glibtop目录,该目录下包含.h头文件,每个头文件定义了一种数据类型,并提供一个系统函数,用以获得相应的系统信息。例如,glibtop_get_cpu()可获取CPU的使用状态,glibtop_get_proclist()可获取当前进程列表,glibtop_get_mem()可获取内存的使用状态等。

通过Telnet连接获得监控信息Telnet协议软件在中间代理上实现后,中间代理成为被监控机的虚拟终端,可执行一系列操作,包括shell命令的执行、文件的查看等。在Telnet连接下,没有服务器端软件提供监控信息,因此,几种监控信息采集方法只能选择shell命令采集方法或/proc伪文件系统采集方法。而/proe伪文件系统采集方法也必须通过shell命令获得,如cat命令。由于中间代理和与其通信的被监控机间是同步的通信协议,即以串行的方式依次通过Telnet方式连接各被监控机,并传输相应/proc文件,解析得到结果。因此,使用DCU Telnet采集监控信息的延迟时间主要是在/proc文件的传输和解析上。因此,在DCU Proc失效时,为了DCU Telnet能够以同样的速度满足监控机的请求,本文中DCU Telnet采取的方法是:只要求被监控机传输与主要监控信息有关的/proe文件,例如计算CPU利用率的/proc/stat,计算内存利用率的/proc/meminfo等。

2 UNIX服务器监控系统的构架与实现

(1)要明确UNIX服务器监控系统的设计目标

针对UNIX系统存在较多功能被闲置的现实情况,应制造出用户真正需要的系统功能,并简化系统使用方法,方便企业内部的系统管理员进行安装、配置、使用和维护,这也恰恰是UNIX服务器监控系统的设计目标。对此,UNIX服务器监控系统应切实监控CPU用户状态使用率、CPU等待I/O状态使用率、CPU系统状态使用率、CPU空闲状态、上下文交换状况、中断状况、系统调用状况、空闲物理内存的状况、文件系统空闲状况、文件系统mode空闲状况、交换区的使用状况、网络流量、服务器或者操作系统本身的状态。其中,U-NIX监控系统既要能够实现内容显现和历史保留,又要构建报警系统,以及相关系统的安全和配置。

(2)要积极构架监控系统

UNIX服务器监控系统应通过数据采集、自动报警、数据显示以及历史查询等四大步骤逐步实施。在数据采集和自动报警过程中,UNIX系统包括需要连续取值的CPU使用状况和能够取瞬间值的非CPU相关数据;在数据显示和历史查询过程中,UNIX系统划分为天报表、周报表和月报表,分别用于显示最近24小时的状况、最近7天的状况和最近30天的状况,具体过程是在系统管理者或者普通用户在自行输入时间范围后,自主选取需要查看的数据,而后从RRD数据库中获取相关数据,并显示于网页上。

(3)要保证UNIX服务器监控系统的真实实现

UNIX监控系统最大的特点在于,无代理方式获得被监控系统的各项性能指标,其中无代理指的是在UNIX服务器上未安装任何自己编写的代理软件,而只通过被管理服务器自身提供的功能获取相关信息。具体要做到,将Net Telnet模块连接到UNIX服务器,在此基础上通过运行系统的命令,无须安装代理软件,即可获取服务器上的各种性能及配置信息,即通过软件系统,将原有需要管理员交互操作完成的步骤自动化,以实现UNIX系统效率和精确度的提升。此种方法贵在设计简单,但同时也要尽可能限制进程的数量,其一在于采用线程,线程是的是在进程内部执行的独立的程序段,即在同一进程中所有线程共享所在进程的上下文;其二在于采用无限循环、定期轮询的方式,检查每一个被监控服务器的连接状态,并按照不同状况作出不同的响应。

3 监控系统的部署与服务器安全性设置

一个网络监控系统如果一旦被非法利用将会使内部网络用户的几乎所有信息都暴露无遗,因此一个网络监控系统在关注整个网络安全的同时更应该加强自身的安全性。安全是一个设计到许多方面的概念,比如物理上的安全、操作系统级别的安全、网络安全等等。

在部署UNIX服务器监控系统时,针对CPU资源,应获取system time、idle time、user time、iowait time等;针对内存资源,应关注空闲物理内存,实时查看系统目前空闲内存状况,使不同的操作系统存在不同的命令,但由于不同命令不能直接显示空闲内存的总量,则其还应经过一定的处理,使命令在所有操作系统上的输出均为空闲内存的大小;针对文件系统资源,应关注目前空闲空间的数量,监控空闲空间在全部空间中所占百分比,以Sun Solaris系统为例,通常会以ufs和vxfs系统获取空闲空间情况。此外,还包括系统可用性的监控,系统可用性是指能够从网络上别的计算机访问到的被监控系统,当前用于服务器可用性的监控通常会基于ICMP协议,以及利用echo功能,回应系统请求者一个简单的网络包。

服务器安全性设置主要从网络信息的安全性角度考虑。当一个网络监控系统被非法利用时,系统内部网络用户的所有信息都将面临暴露的危险,由此,网络监控系统不仅要关注整个网络的安全,更要强化自身安全性。目前,Apache Server是能够部署在UNIX操作系统上的最为有效的安全装置。作为一种流行的Web服务器,Apache Server主要实施选择性访问控制以及强制性访问控制的安全手段,其内部的安全模块更具灵活性和实用性,比如mod_access模块可以按照访问者的域名或者IP地址对Apache Server的访问进行控制,即通常意义上的基于主机的访问控制;mod_auth模块可用于对用户和组的认证授权等方面的控制。为确保Apache Server的安全运行,应明确ServerRoot目录的权限,正确配置SSI,阻止用户修改系统设置,明确Apache Server的确省访问特性,衡量CGI脚本的安全性等。

4 监控系统存在的问题及发展方向

UNIX监控系统亟待改进之处表现为对Telnet的处理,在使用明文传送口令和数据过程中,Telnet协议下的口令和数据极易被别人窃取或者截获,就连Telnet协议所涉及服务程序的安全验证方式也可能遭遇中间人的破坏,比如中间人可能冒充真正的服务器在接收相关口令和数据后,再将错误口令和数据信息传送至真正的服务器,这个过程中必然产生极其严重的问题。对此,UNIX监控系统必须促使Telnet尽快向SSH即Secure SHell转变,通过SSH,将所有传输的数据实行加密,避免相关数据被截获或破坏,并防止DNS及IP欺骗。当前技术条件下,SSH主要由客户端与服务端的软件构成,并表现为1.x和2.x两个不兼容的版本,不过OpenSSH2.x能够同时支持此两种不兼容版本。

同时,UNIX监控系统还须考虑到对监控信息的组织和利用。任何使用者的计算机系统内部都存在海量的信息数据,但UNIX监控系统尚不能对所有主机的监控信息展开数据分析级别的保存与记录。未来,数据库、数据仓库都将得以完善,以便最大限度地存储海量的监控数据,并从巨大的数据仓库中挖掘更多更重要更有用的信息。数据挖掘工具也将相对准确地预测将来的趋势和行为,以更好地支持人们的决策,并解决那些较为消耗人工时间的传统问题,更为智能地分析临界值,提高对报警临界的智能性。

5 结语

信息时代,计算机系统规模日益扩大,服务器运行状况备受考验,尤其对现代企业来讲,如果公司管理系统不能为实现更加高效的管理、更加有序的组织服务,则企业很难获取长久发展的动力和支持。实施完善的监控和管理软件,才最有可能解决管理系统不佳的难题,UNIX服务器监控系统的构架与实现也才具备更为现实的作用和意义。目前,UNIX监控系统主要采取Telnet方法实现系统的登录和管理,但在U-NIX环境下,UNIX监控系统将逐步实现Telnet向SSH的转变,使得监控系统本身更加安全、灵活、高效。完全可以相信,未来的UNIX监控系统将获取更多Telnet和SSH的功能,并拥有更多对Windows系统的支持。

参考文献

[1]蒋漪涟.基于广域网的服务器监控系统的设计与实现[J].计算机技术与发展,2007,(09).

[2]屈利娟,郭丽霞,贺天鹤.基于SNMP的服务器性能监控技术[J].计算机时代,2007,(01).

[3]江均,唐刚,张建,张超.基于Web服务器的监控系统设计与实现[J].工业控制计算机,2008,(01).

[4]贾凯东.浅谈UNIX系统的安全策略[J].科技创新导报,2009,(07).

[5]蒋冬青,姜原成.政府公众满意度测评——基于层次分析法与模糊评价的综合评价[J].中南财经政法大学研究生学报,2009,(01).

[6]钱忠宝.一种基于模糊数学的评标方法——模糊综合评价法[J].中国招标,2008,(04).

Unix操作系统笔试题 第4篇

Unix操作系统笔试题,应届毕业生求职网总结如下,供参考:

1. 最常用的Unix版本是什么?

2. Unix系统中的`对象不是___就是_____,

3. Unix系统中的任务调度是指:

4. Unix中删除文件的命令是____,删除文件夹的命令是_____

5. Unix中,ls命令用于现实当前路径下的所有文件和文件夹,

-- 判断对错

6. 显示当前所在路径的命令是_____

7. Unix系统中用户的家目录的名字与是______相同的。

8. Shell是____与_____之间的接口。

Unix操作系统 第5篇

● “模拟UNIX文件系统”实验概述

“模拟UNIX文件系统”实验实质上是用一个文件模拟UNIX文件系统的存储系统。

在UNIX系统中, 把每个磁盘或磁带看作是一个文件卷, 在每个文件卷上可存放一个文件系统。每个文件系统, 由一系列的逻辑块组成, 简称盘块。每个盘块可为512、1024、2048字节或是512字节的整数倍, 这些值可以在生成系统时直接指定。假定一个盘块512字节, 盘块从0开始直到最大容量并按顺序加以编号就成了一个文件卷, 也叫文件系统。

一个文件卷的空间图示如图1, 文件卷的空间通常被划分为若干用途各不相同的部分:引导区、管理区、索引节点区和文件存储区。

其中0#块一般用于系统引导, 1#块为超级块, 2#块到K#块存放索引节点, 即i Node, K+1#块到N#块存放文件。读入并启动操作系统由引导块完成。[6]超级块用于记录文件系统中盘块和磁盘索引结点的使用情况, 主要包括文件系统的盘块数目、空闲盘块号栈、空闲盘块号数目、空闲磁盘索引结点号栈、空闲磁盘索引结点数目、超级块修改标志和修改时间等。

模拟UNIX文件系统实验完成一个UNIX文件系统的子集的模拟实现, 设计时可以忽略引导块。

● 实验设计思路

1.基本原理

为了加快目录查询速度, UNIX目录项只保留文件名和索引节点号, 索引节点则保存除文件名外的有关信息。[7]UNIX文件系统的超级块含有文件系统各个数据结构的大小, 索引节点的位置可据此得到。而UNIX文件系统创建时生成的第一个索引节点则对应根目录, 找到根目录后, 就可以对目录树进行搜索, 查找所需要的目录项, 从而找到所需要的文件, 进而对文件进行各种操作。

而UNIX把普通文件与目录文件都存放在磁盘或磁带上, 一个磁盘就是一个文件系统。例如, 一个磁盘有200块, 那么就先生成一个200×512B的文本文件, 512B就是一个磁盘块, 然后建立根目录root, 根目录在文件区, 假设存放索引节点的盘块数是12块, 再加上引导块, 那么从13#盘块开始存放文件, 根的目录文件就放在13#盘块, 每个目录至少有两个目录项, 即父目录和当前目录。假设一个索引节点占32个字节, 根目录的索引节点就是第1个索引节点, 放在第1块的前32个字节中, 把索引节点内容填写好, 还可以再初始化一些目录。目录文件放在文件区, 填写好相应索引节点内容, 然后根据初始化的结果, 把空闲数据盘块分组, 按照成组链接法链接, 设置好空闲盘块号栈。同理, 设置好空闲索引节点号栈, 对超级块进行初始化, 超级块内容放在0#块。然后, 开始一系列的操作。

2.文件卷的组织

假设文件卷总共有200个盘块。用栈和成组链接法来管理空闲索引节点和空闲盘块;盘块的大小设计为512字节, 其中0#块为超级块 (引导块忽略) , 用于管理盘块的信息以及管理空闲盘块。1#~12#块共12块用于存放索引节点, 由于每个索引节点大小为32字节, 一个块可以存放16个索引节点, 13#~199#块用于存放数据块。文件卷结构[8]图示如图2。

3.超级块

超级块[9]用于管理索引节点和盘块的使用情况及分配信息, 存放文件系统的盘块数目、索引节点号栈的指针、索引节点号栈中元素个数、成组链接法管理的空闲盘块号栈的指针和空闲盘块号栈中元素的个数, 以及对于整个文件系统的盘块地址等。

4.空闲盘块

空闲盘块采用成组链接法[10]管理 (如图3) , 每组10块, 13#~99#分为9组, 每组的最后一个盘块存放下一组的盘块号信息。最后一组只有7块, 加上0作为结束标志。在超级块中用一个一维数组 (10个元素) 作为空闲磁盘块栈, 放入第一组盘块。

5.索引节点

索引节点[11]主要包括文件的字节数, 文件拥有者的User ID, 文件的Group ID, 文件的读、写、执行权限, 文件的时间戳, 链接数 (即有多少文件名指向这个索引节点) , 文件物理地址等。

文件物理地址为7项:4个直接地址、1个一次间址、1个两次间址、1个三次间址。

每个索引节点大小为32B, 一个块可以存放16个索引节点, 1#~12#块共12块用于存放索引节点, 总共有192个索引节点。空闲索引节点采用成组链接法管理, 每组20个, 分为10组, 最后一组12个。在超级块中用一维数组 (20个元素) 作为空闲索引节点号栈。

6.目录

每个目录是一个文件, 每个目录包含若干个目录项。一个目录项包括索引节点编号和文件名。[12]

● 实验过程说明

下面以下页图4为例, 说明如何构建文本文件模拟UNIX文件系统 (图中“i”表示索引节点, “13#”表示索引节点中的物理地址项内容为13#盘块) 。

根据图4, 根目录文件有目录项五个, 名字分别为“.”“..”“bin”“usr”“dev”, 它们的索引节点编号分别为1、1、2、3、4, 其中“.”表示当前目录, “..”表示父目录。而根目录的当前目录和父目录都为其自身, 因此它们的索引节点编号皆为1。根目录的索引节点编号为1, 写在磁盘1#盘块的第一个32字节处, 假设根目录文件写在磁盘13#盘块, 1#索引节点的文件物理地址处写13#。同理, 假设bin目录文件、usr目录文件、dev目录文件分别写在14#、15#、16#盘块, 其索引节点编号为2、3、4的文件物理地址处分别写14#、15#、16#, 依此类推。

初始化后的文本文件如图5所示, 图中每一行代表一个磁盘块。

摘要:本文阐述了图示法在“模拟UNIX文件系统”大型实验的设计思路及具体操作中的应用, 以期能够巩固和补充操作系统的原理教学, 从而提高学生对操作系统的认识, 使学生能将操作系统中文件系统部分的概念具体化。

Unix操作系统 第6篇

本文以UNIX环境下shell脚本编程的相关内容为背景, 介绍了对我公司实际应用的售后服务管理系统和ERP系统的集成中售后服务系统在ERP端产生的日志文件进行截断和备份处理的方法。

二、用cron系统调度进程定期自动运行shell脚本

1、cron和crontab

在UNIX系统中, cron是系统主要的调度进程, 可以在无需人工干预的情况下运行作业。有一个叫做crontab的命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个crontab文件来保存调度信息。可以使用它运行任意一个shell脚本或某个命令, 每小时运行一次或一周运行三次, 这完全取决于用户。

2、crontab的域

为了能够在特定的时间运行作业, 需要了解crontab文件每个条目中各个域的意义和格式。下面就是这些域:

第1列分钟1~59

第2列小时1~23 (0表示子夜)

第3列日1~31

第4列月1~12

第5列星期0~6 (0表示星期天)

第六列要运行的命令或脚本

下面是crontab的格式:

分时日月星期要运行的命令或脚本

crontab文件的一个条目是从左边读起的, 第一列是分, 最后一列是要运行的命令或脚本。在这些域中, 可以用横杠-来表示一个时间范围, 例如如果希望星期一至星期五运行某个作业, 那么可以在星期域使用1-5来表示。还可以在这些域中使用逗号“, ”, 例如如果希望星期一和星期四运行某个作业, 只需要使用1, 4来表示。

当使用crontab运行shell脚本时, 要给出脚本的绝对路径, 设置相应的环境变量。既然向cron提交了这些作业, 就要向cron提供所需的全部环境。所以要保证在shell脚本中提供所有必要的路径和环境变量, 除了一些自动设置的全局变量。

3、日志文件的截断和备份

(1) 用date命令产生带日期信息日志文件的文件名

在截断和备份日志文件时, 为了使其具有唯一性, 可以按照日志文件截断和备份的日期和时间来识别这些文件。可以使用date命令做到这一点。这样就能够使日期和时间成为日志文件名中的一部分。

(2) 日志文件的截断和压缩

日志文件的截断可以通过先将日志文件拷贝到另一文件中, 然后将原日志文件清空的方法来完成。在UNIX环境下文件拷贝的命令为cp, 而对文件清空我们使用cat命令来完成。例如要将文件file清空, 使用的命令为:

为减少用ftp传输的方式将已截断的日志文件向Windows系统的传输时间, 在传输前我们可以先用gzip命令对这些文件进行压缩。

要实现对多个日志文件的上述操作, 我们可以先定义一个变量, 在该变量中包含所有需要操作的日志文件的完整路径和文件名, 然后用for循环来完成操作。

4、用自动ftp传输的方式实现日志文件向Windows系统的备份

(1) shell脚本中<<的使用

当shell看到<<的时候, 它就会知道下一个词是一个分界符。在该分界符以后的内容都被当作输入, 直到shell又看到该分界符 (位于单独的一行) 。这个分界符可以是我们定义的任何字符串。

(2) 自动ftp传输

可以用自动ftp传输的方式实现日志文件向Windows系统的备份。在ftp命令中使用了<<, 并使用ftp-i-n选项, 这意味着不要自动登录, 而且关闭交互模式。这样就使得脚本可以使用user子命令进行登录。

5、完成日志截断和备份的完整shell脚本

综上所述, 为完成每星期对日志文件做一次截断和备份, 我们在/usr/bin/crontab文件中加入下列一行。它告诉cron系统调度进程每个星期一的上午7时运行/baan/baan5/bse/tmp目录下的shell脚本logrotate.sh。脚本logrotate.sh完成对日志文件的截断、清空、压缩和向Windows系统的传输工作。

该脚本会在每个星期一由cron系统调度进程控制自动执行一次, 也可在任意时刻由系统管理员手动执行用于查看自该脚本上次执行以来所产生的日志信息。

三、结束语

上述是我们在实际工作中对我公司售后服务管理系统和ERP系统的集成中售后服务系统在ERP端产生的日志文件的处理方法, 稍做修改就可应用于运行于UNIX和LINUX环境下的其它各类信息系统中。

摘要:本文详细介绍了在UNIX环境下对信息系统产生的日志信息进行定期自动截断并按日期进行备份的方法。同时我们对日志文件进行了压缩并通过自动ftp传输的方式将其传输给Windows系统以便于系统管理员在Windows环境下用字处理软件对这些日志文件进行阅读和分析。

关键词:UNIX,shell ftp cron crontab,日志,日志截断

参考文献

[1]Randal K.Michael编著.精通UNIX Shell脚本编程[M].詹文军, 邓波, 等译.北京:电子工业出版社, 2005.

Unix操作系统 第7篇

关键词:电力调度,SCADA,UNIX,ORACLE

0 引言

现阶段的大中型县级供电企业的调度自动化系统主要实现数据采集和控制(SCADA)功能。SCADA系统作为能量管理系统(EMS)的一个最主要的子系统,能正确掌握电网运行状态,快速诊断系统故障,保证电网运行的可靠性、安全性,提高调度的效率和水平,现已成为电力调度不可或缺的工具。本文结合青田供电局调度自动化主站系统实际,描述SCADA主站的系统结构,阐述YJD2006For Unix系统的特点。

1 系统构成

系统网络采用双网、双冗余结构,发生故障时可自动切换,保障系统的不间断运行。网络主要设备由主备服务器、主备数采机、主备终端服务器、高速调制解调器、主备交换机、若干工作站、网络设备、卫星时钟接收装置等组成。

1.1 服务器

系统共有两台服务器,每一台服务器都直接与以太网接口连接到双局域网上,SCADA内网可通过隔离装置及防火墙连接到MIS网。

数据库的连接使用MIDAS技术(多层应用程序体系),将连接数据库的工作交给MIDAS服务程序,其他应用程序都通过MIDAS服务来访问ORACLE数据库;这样一来,只要在最初启动MIDAS服务的时候等上一些时间,接下来的执行程序都不需要在做等待。

1.2 数据采集子系统

数据采集子系统通过TERMINAL-SERVER与各厂站远动终端装置通信,获取实时数据,同时连接GPS为整个系统提供精确的时钟。数据采集子系统亦工作在主/备方式,用软件实现双通道接口的切换,并通过终端服务器与双局域网连接,以完成数据采集系统与厂站端设备之间,以及数据采集系统与其他子系统之间的数据交换、接收、传送和处理,同时发送控制命令。通信状态的监视和统计、通道的切换控制也由数据采集子系统完成。

双数采系统可根据双局域网的运行情况,自动判断数据信息的传送通道,当双网发生切换时,系统自动改变目标网段,不会丢失信息。

1.3 调制解调器

新型YJD-2020型系列调制解调器。调制解调器速率在300至9600波特之间可调。

调制解调器具备通道监测功能。每个通道都具备对收发信号、设置状态检测功能。可监测收发信号的电平、最高、最低频率、中心频率、接收信号的误码率等。各监测量和设置状态分别作为遥测、遥信量通过485通信口进入SCADA系统完成监测功能。

1.4 工作站

在WINDOWS平台下,通过在UNIX操作系统上运行监控系统人机会话工作站软件,接收并查看系统实时画面及各种报表等数据信息。

通过工作站的画面显示和网络数据信息交换,调度员可以监视电力系统的运行状态,便捷高效的完成工作任务。其中包括监视各种量测量曲线、潮流分布、报警信息、事件顺序记录、报表信息、事故追忆信息等等。

1.5 卫星时钟子系统

安装一套配有天线及数据通讯接口的全球定位系统(GPS)时钟及相应的卫星时钟校时软件。

1.6 WEB外网服务系统

使用MIDAS技术(多层应用程序体系)与商用数据库ORACLE10g连接,通过支持JSP/SERVLET技术的TOMCAT(WEB服务器)和高效的YJDJSVR(数据供应服务核心)向MIS网提供SCADA实时数据和监测画面,实现数据的稳定、高效的传输。

2 系统新特色

2.1 强化了系统稳定性

在系统构架设计上做了重大改进,摒弃了传统的UDP通讯方式,采用更可靠的TCP通讯方式;由中间站衔接前置机和后台机。

2.2 优化网络通信

为避免数据流量过大,后台机向中间站按需索取实时数据:当某后台机显示一个画面时,后台机告诉中间站需要哪些测点数据,中间站只向此后台机发送该部分测点数据,并且每三秒发送一次该批测点的有变化的值。

2.3 均匀硬件负荷

系统在服务器上安装ORACLE数据库,并且安装“中间站”程序,工作重心集中到了服务器上,原本的前置机变成了比较单纯的“数采机”,减轻了工作压力,有利于稳定性的提高,同时也为接收处理更大量实时信息创造了条件。

文章联系青田供电局调度自动化主站系统,分析了YJD2006For Unix的系统构造和特性,阐述了其在现阶段大中型县调广泛应用的模式,其性能特点为县级供电企业电网可靠稳定运行、电力调度自动化和现代化以及变电站无人值班提供了良好的保障。

参考文献

[1]张明光.电力系统远动及调度自动化[M].北京:中国电力出版社,2010.

[2]张永健.电网监控与调度自动化[M].第2版.北京:中国电力出版社,2007.

[3]浙江电网地县调度自动化系统技术规范[Z].

Unix操作系统 第8篇

√Unix C++原代码一份

√在Linux系统创建生成目标的目录:中间对象文件、静态库、动态库目录等

√在Linux系统开放以下目录的权限 (根据Oracle的版本目录会有所不同) 给当前用户, 不然编译会报没权限

oracle/app/oracle/product/10.2/rdbms/demo

oracle/app/oracle/product/10.2/rdbms/public

oracle/app/oracle/product/10.2/plsql/public

oracle/app/oracle/product/10.2/network/public

√根据本项目的情况, 设定的Linux下的Profile示例:

注意点:

1、linux下的profile文件名:.bashrc。

2、ulimit-c unlimited Core大小的限制, 如果设置的太小, core文件无法生成或生成出来的不能看。查看core文件, gdb进程名core文件名。

3、生成动态库要加-f PCI参数。PIC表示生成位置无关代码 (Position Independent Code)

4、系统的动态库目录的设置LD_LIBRARY_PATH。

2.转换注意要点

1、extern“c”要写成extern”C”

2、系统hashmap

Hashmap不使用原include下的hash_map, 使用linux自带的hash_map

#include<ext/hash_map>

using namespace__gnu_cxx;

3、Hash Table的派生类访问父类的m_p Head时, 报错“在此作用域中尚未声明”

只有模板会出现这种情况, 普通类是不会。

例如:

4、报错“multiple definition of”

头文件定义的字符串常量, 比如:const char*C_PARAM_RELATION_CHECK_1="=";//必须相等。

有两种方法:定义到cpp中, 在头文件extern出来;偷懒可以直接改成static。

定义在头文件的有实现体的函数

改成内联函数即可:

5、undefined reference报错的解决方案

undefined reference to`dlerror'

undefined reference to`dlopen'

undefined reference to`dlerror'

解决办法:在makefile的LDFLAGS后面把选项-ldl添加上即可。

6、src/app/hbparam

要改成:if (argc>=3&&strncmp (argv[2], "-k", 2) ==0)

7、sort函数问题 (table.cpp)

改成:

8、信号量个数的限制会导致IPC资源创建失败

ipcs-ls

semmsl 250每个信号量集中的最大信号量数。

semmns 32000整个系统中的最大信号量数。

semopm 100每一个semop系统调用操作的最大信号量数。

semmni 200信号量集最大数。

echo"kernel.sem=2500 32000 1000 512">>/etc/sysctl.conf

sysctl-p就可以生效。

3.总结

Linux C++在编写C++语言的规范性上比IBM下的Unix C++更为规范, 通过一些调整可以解决将Unix C++调整为Linux C++的脚本, 使程序能够较快的适应于Linux系统运行。

摘要:以前, 我们为了计费系统的性能等需要, 一般会购买小型机 (如IBM小型机) , 并采用Unix C++进行编程, 一般会购买Oracle存放数据。随着技术的发展, 近几年去IOE和PC化成为系统建设和演进的主要生力军。那么, 如何更好的沿用原有的代码, 减少系统建设的周期, 就面临如何将Unix C++的程序转为Linux C++的程序的问题。本篇通过步骤, 对程序的转换的要点进行讲解, 希望能给编程人员带来帮助。

关键词:Unix C++,Linux C++

参考文献

UNIX下Socket编程浅析 第9篇

关键词:UNIX,Socket,函数,程序

1. Socket建立

为了建立Socket, 程序可以调用Socket函数, 该函数返回一个类似于文件描述符的句柄。socket函数原型为:

int socket (int domain, int type, int protocol) ;

domain指明所使用的协议族, 表示互联网协议族 (TCP/IP协议族) ;type参数指定socket的类型:SOCK_STREAM或SOCK_DGRAM, Socket接口还定义了原始Socket (SOCK_RAW) , 允许程序使用低层协议;protocol通常赋值"0"。Socket () 调用返回一个整型socket描述符, 你可以在后面的调用使用它。

Socket描述符是一个指向内部数据结构的指针, 它指向描述符表入口。调用Socket函数时, socket执行体将建立一个Socket。Socket执行体为你管理描述符表。两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。Socket数据结构中包含这五种信息。

2. Socket配置

通过socket调用返回一个socket描述符后, 在使用socket进行网络传输以前, 必须配置该socket。面向连接的socket客户端通过调用Connect函数在socket数据结构中保存本地和远端信息。无连接socket的客户端和服务端以及面向连接socket的服务端通过调用bind函数来配置本地信息。

Bind函数将socket与本机上的一个端口相关联, 随后你就可以在该端口监听服务请求。Bind函数原型为:

int bind (int sockfd, struct sockaddr*my_addr, int addrlen) ;

Sockfd是调用socket函数返回的socket描述符, my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针;addrlen常被设置为sizeof (struct sockaddr) 。

struct sockaddr结构类型是用来保存socket信息的:

sa_family一般为AF_INET, 代表Internet (TCP/IP) 地址族;sa_data则包含该socket的IP地址和端口号。使用bind函数时, 可以用下面的赋值实现自动获得本机IP地址和随机获取一个没有被占用的端口号:

通过将my_addr.sin_port置为0, 函数会自动为你选择一个未占用的端口来使用。同样, 通过将my_addr sin_addr.s_addr置为INADDR_ANY, 系统会自动填入本机IP地址。注意在使用bind函数是需要将sin_por和sin_addr转换成为网络字节优先顺序;而sin_addr则不需要转换。

计算机数据存储有两种字节优先顺序:高位字节优先和低位字节优先。Internet上数据以高位字节优先顺序在网络上传输, 所以对于在内部是以低位字节优先方式存储数据的机器, 在Internet上传输数据时就需要进行转换, 否则就会出现数据不一致。

Bind () 函数在成功被调用时返回0;出现错误时返回"-1"并将errno置为相应的错误号。需要注意的是, 在调用bind函数时一般不要将端口号置为小于1024的值, 因为1到1024是保留端口号, 你可以选择大于1024中的任何一个没有被占用的端口号。

3. 连接建立

面向连接的客户程序使用Connect函数来配置socket并与远端服务器建立一个TCP连接, 其函数原型为:

int connect (int sockfd, struct sockaddr*serv_addr, int addrlen) ;

Sockfd是socket函数返回的socket描述符;serv_addr是包含远端主机IP地址和端口号的指针;addrlen是远端地质结构的长度。Connect函数在出现错误时返回-1, 并且设置errno为相应的错误码。进行客户端程序设计无须调用bind () , 因为这种情况下只需知道目的机器的IP地址, 而客户通过哪个端口与服务器建立连接并不需要关心, socket执行体为你的程序自动选择一个未被占用的端口, 并通知你的程序数据什么时候到达端口。

Connect函数启动和远端主机的直接连接。只有面向连接的客户程序使用socket时才需要将此socket与远端主机相连。无连接协议从不建立直接连接。面向连接的服务器也从不启动一个连接, 它只是被动的在协议端口监听客户的请求。

Listen函数使socket处于被动的监听模式, 并为该socket建立一个输入数据队列, 将到达的服务请求保存在此队列中, 直到程序处理它们。

int listen (int sockfd, int backlog) ;

Sockfd是Socket系统调用返回的socket描述符;backlog指定在请求队列中允许的最大请求数, 进入的连接请求将在队列中等待accept () 它们。Backlog对队列中等待服务的请求的数目进行了限制, 大多数系统缺省值为20。如果一个服务请求到来时, 输入队列已满, 该socket将拒绝连接请求, 客户将收到一个出错信息。当出现错误时listen函数返回-1, 并置相应的errno错误码。

accept () 函数让服务器接收客户的连接请求。在建立好输入队列后, 服务器就调用accept函数, 然后睡眠并等待客户的连接请求。

int accept (int sockfd, void*addr, int*addrlen) ;

sockfd是被监听的socket描述符, addr通常是一个指向sockaddr_in变量的指针, 该变量用来存放提出连接请求服务的主机的信息 (某台主机从某个端口发出该请求) ;addrten通常为一个指向值为sizeof (struc sockaddr_in) 的整型指针变量。出现错误时accept函数返回-1并置相应的errno值。当accept函数监视的socket收到连接请求时, socket执行体将建立一个新的socket, 执行体将这个新socket和请求连接进程的地址联系起来, 收到服务请求的初始socket仍可以继续在以前的socket上监听, 同时可以在新的socket描述符上进行数据传输操作。

4. 数据传输

Send () 和recv () 这两个函数用于面向连接的socke上进行数据传输。

Send () 函数原型为:

int send (int sockfd, const void*msg, int len, int flags) ;

Sockfd是你想用来传输数据的socket描述符;msg是一个指向要发送数据的指针;Len是以字节为单位的数据的长度;flags一般情况下置为0。

Send () 函数返回实际上发送出的字节数, 可能会少于你希望发送的数据。在程序中应该将send () 的返回值与欲发送的字节数进行比较。当send () 返回值与len不匹配时, 应该对这种情况进行处理。

recv () 函数原型为:

int recv (int sockfd, void*buf, int len, unsigned int flags) ;

Sockfd是接受数据的socket描述符;buf是存放接收数据的缓冲区;len是缓冲的长度。Flags也被置为0。Recv () 返回实际上接收的字节数, 当出现错误时, 返回-1并置相应的errno值。

5. 结束传输

当所有的数据操作结束以后, 你可以调用close () 函数来释放该socket, 从而停止在该socket上的任何数据操作:

close (sockfd) ;

你也可以调用shutdown () 函数来关闭该socket。该函数允许你只停止在某个方向上的数据传输, 而一个方向上的数据传输继续进行。如你可以关闭某socke的写操作而允许继续在该socket上接受数据, 直至读入所有数据。

int shutdown (int sockfd, int how) ;

Sockfd是需要关闭的socket的描述符。参数how允许为shutdown操作选择以下几种方式: (0--不允许继续接收数据;1--不允许继续发送数据;2--不允许继续发送和接收数据, 均为允许则调用close () ) 。

shutdown在操作成功时返回0, 在出现错误时返回-1并置相应errno。

参考文献

[1]高波, Linux网络编程[M], 北京:清华大学出版社, 2000.

[2]都幸帆、刘峰, UNIX的进程通讯及应用, 小型微型计算机系统, 1990年01期

[3]王静、曲凤娟, 基于Socket的多用户并发通信的设计, 福建电脑, 2007年03期

相关文章
婚礼安排表范文

婚礼安排表范文

婚礼安排表范文(精选7篇)婚礼安排表 第1篇婚礼准备及婚礼日程安排表■婚礼筹备计划1.决定婚礼日期、地点、仪式及婚宴方式2.确定婚礼预算...

1
2025-09-22
昙花静静开随笔

昙花静静开随笔

昙花静静开随笔(精选3篇)昙花静静开随笔 第1篇小学生作文:昙花开了正文:国庆节的晚上,我照例去看昙花是否开了.这次惊奇地发现昙花开...

1
2025-09-22
沪教版三年级下册语文周周练7周

沪教版三年级下册语文周周练7周

沪教版三年级下册语文周周练7周(精选10篇)沪教版三年级下册语文周周练7周 第1篇第7周周练1、圈出词语中的错别字,并改正在横线上:迫不...

1
2025-09-22
患者写给医院的一封感谢信

患者写给医院的一封感谢信

患者写给医院的一封感谢信(精选14篇)患者写给医院的一封感谢信 第1篇患者写给医院的一封感谢信尊敬的各位领导:你们好!我是一名来重庆...

1
2025-09-22
欢度新年晚会活动策划方案

欢度新年晚会活动策划方案

欢度新年晚会活动策划方案(精选12篇)欢度新年晚会活动策划方案 第1篇晚会主题:待定( 备选:old if not wild we are young fear...

1
2025-09-22
河北毕业生就业信息网

河北毕业生就业信息网

河北毕业生就业信息网(精选14篇)河北毕业生就业信息网 第1篇河北立法:帮助高校毕业生就业针对当前高校毕业生就业难的现状,经河北省十...

1
2025-09-22
合并同类项参考例题

合并同类项参考例题

合并同类项参考例题(精选14篇)合并同类项参考例题 第1篇合并同类项例1 判断下列各式是否正确,如不正确,请改正.(1)3x23x2x2...

1
2025-09-22
话题作文指导专题

话题作文指导专题

话题作文指导专题(精选8篇)话题作文指导专题 第1篇无愧我心 人可以欺骗一切,但唯独无法欺骗自己的心灵,心灵是比雪山天池还要澄明清澈...

1
2025-09-22
付费阅读
确认删除?
回到顶部