The MONSOON Implementation of the Generic Pixel Server

Similar documents
Automated Software Configuration in the MONSOON System

MONSOON Software Design & Status

The NEWFIRM Observing Software: From Design to Implementation. Copyright 2008 Society of Photo-Optical Instrumentation Engineers

MONSOON Data Handling System Interface Status and Data Stream Transfer

NGUI: The NEWFIRM Graphical User Interface

The Mosaic Data Capture Agent

MONSOON Generic Pixel Server Communications, Command/Response and Data Stream Interface Description

The MONSOON Libraries API for Linux

MONSOON Master Control Board Test Procedures

MONSOON. TORRENT DHE Architecture. DHE Architecture Document NOAO Document TRNT-AD Revision: 5.0

MONSOON IR Acquisition Board Test Procedures

Requirements, Software Architecture & Design

MONSOON Torrent Production Readiness Review

Operating System: Chap13 I/O Systems. National Tsing-Hua University 2016, Fall Semester

UNIVERSITY OF HAWAII AT MANOA Institute for Astrononmy

Concurrent Architectures - Unix: Sockets, Select & Signals

CSE380 - Operating Systems. Communicating with Devices

Data Processing for SUBARU Telescope using GRID

Concurrent & Distributed Systems Supervision Exercises

The control of I/O devices is a major concern for OS designers

2. Which of the following resources is not one which can result in deadlocking processes? a. a disk file b. a semaphore c. the central processor (CPU)

Any of the descriptors in the set {1, 4} have an exception condition pending

Module 12: I/O Systems

##)44 6 BIS $!4! #/-02%33)/. 02/#%$52%3 &/2 $!4! #)2#5)4 4%2-).!4).' %15)0-%.4 $#% 53).' %22/2 #/22%#4)/. 02/#%$52%3

Configuring and Managing Embedded Event Manager Policies

MOSAIC Operations Concept Document

MONSOON. PAN Run-time Configuration, Setup and Operating Mode Definition Interface Description. NOAO Document ICD 5.1 Revision: 1.

3.1 Introduction. Computers perform operations concurrently

The University of Florida s next-generation cryogenic infrared focal plane array controller system

LabVIEW Communication Techniques for Distributed Applications

GFS: The Google File System. Dr. Yingwu Zhu

MONSOON. TORRENT DHE PSM TSM INTERFACE DESCRIPTION Interface Control Document 7.6 NOAO Document TRNT-AD Version: 0. Authored by: Peter Moore

Device-Functionality Progression

Chapter 12: I/O Systems. I/O Hardware

Outline. What is TCP protocol? How the TCP Protocol Works SYN Flooding Attack TCP Reset Attack TCP Session Hijacking Attack

Real-Time Component Software. slide credits: H. Kopetz, P. Puschner

by I.-C. Lin, Dept. CS, NCTU. Textbook: Operating System Concepts 8ed CHAPTER 13: I/O SYSTEMS

Log Manager. Introduction

The low-cost system for interconnecting computers and their peripherals

Universal Communication Component on Symbian Series60 Platform

Continuous Real Time Data Transfer with UDP/IP

The RTS2 protocol ABSTRACT

RADIUS Server Load Balancing

6.9. Communicating to the Outside World: Cluster Networking

操作系统概念 13. I/O Systems

EE472 Final Exam SOLUTION KEY. Prof. Blake Hannaford Department of Electrical Engineering The University of Washington 9-DEC-2008

DSP/BIOS Kernel Scalable, Real-Time Kernel TM. for TMS320 DSPs. Product Bulletin

1 What is an operating system?

[08] IO SUBSYSTEM 1. 1

Chapter 1 CONCEPTS AND FACILITIES. SYS-ED/ Computer Education Techniques, Inc.

GFS: The Google File System

ni.com Best Practices for Architecting Embedded Applications in LabVIEW

Outline. Operating Systems: Devices and I/O p. 1/18

Answer to exercises chap 13.2

Configuring NTP. Information About NTP. This chapter contains the following sections:

I/O AND DEVICE HANDLING Operating Systems Design Euiseong Seo

DEEPIKA KAMBOJ UNIT 2. What is Stack?

Implementing and Monitoring Alarms and Alarm Log Correlation

Dynamic Host Configuration (DHC) Internet-Draft Intended status: Standards Track Expires: August 31, 2017 February 27, 2017

Chapter 13: I/O Systems

I/O. CS 416: Operating Systems Design Department of Computer Science Rutgers University

Troubleshooting the Security Appliance

Chapter 13: I/O Systems

I/O Handling. ECE 650 Systems Programming & Engineering Duke University, Spring Based on Operating Systems Concepts, Silberschatz Chapter 13

Inspirel. YAMI4 Requirements. For YAMI4Industry, v page 1

Configuring NTP. Information About NTP. This chapter contains the following sections:

Chapter 13: I/O Systems

Module 12: I/O Systems

AUTOBEST: A United AUTOSAR-OS And ARINC 653 Kernel. Alexander Züpke, Marc Bommert, Daniel Lohmann

SCSI is often the best choice of bus for high-specification systems. It has many advantages over IDE, these include:

Unit 3 and Unit 4: Chapter 4 INPUT/OUTPUT ORGANIZATION

Lecture 21 Disk Devices and Timers

Silberschatz and Galvin Chapter 12

Operating System. Chapter 4. Threads. Lynn Choi School of Electrical Engineering

This chapter describes how to configure the Network Time Protocol (NTP) on Cisco NX-OS devices. This chapter includes the following sections:

Configuring Cisco IOS IP SLAs Operations

Knowledge enrichment through dynamic annotation

Communication in Distributed Systems

Proposed PLDM support over NC-SI RBT Commands (Work-In-Progress)

Processor : Intel Pentium D3.0 GigaHtz

Exam TI2720-C/TI2725-C Embedded Software

Failover for High Availability in the Public Cloud

Chapter 12: I/O Systems

Chapter 13: I/O Systems

Chapter 12: I/O Systems. Operating System Concepts Essentials 8 th Edition

Recap from last class

THE TRANSPORT LAYER UNIT IV

Chapter 13: I/O Systems

CSC227: Operating Systems Fall Chapter 1 INTERRUPTS. Dr. Soha S. Zaghloul

Input/Output Systems

Introduction to Client-Server Model

System-state System Calls. The alarm ID returned may be used to delete an alarm request. The following function codes are supported:

CPUs. Input and output. Supervisor mode, exceptions, traps. Co-processors. Computers as Components 4e 2016 Marilyn Wolf

Arrival Universal Voice Mail Instructions

Chapter 13: I/O Systems. Operating System Concepts 9 th Edition

Appendix A Pseudocode of the wlan_mac Process Model in OPNET

The GBN sender must respond to three types of events:

Chapter 13: I/O Systems

Group ID: 3 Page 1 of 15. Authors: Anne-Marie Bosneag Ioan Raicu Davis Ford Liqiang Zhang

Chapter 3 Process Description and Control

Transcription:

The MONSOON Implementation of the Generic Pixel Server P. N. Daly and N. C. Buchholz MONSOON Project, Major Instrumentation Program, National Optical Astronomy Observatory, 950 N. Cherry Avenue, P. O. Box 26732, Tucson, AZ 85726-6732, USA. ABSTRACT MONSOON is NOAO s diverse, future-proof, array controller project that holds the promise of a common hardware and software platform for the whole of US astronomy. As such it is an implementation of the Generic Pixel Server which is a new concept that serves OUV-IR pixel data. The fundamental element of the server is the GPX dictionary which is the only entry point into the system from instrumentation or observatory level software. In the MONSOON implementation, which uses mostly commercial off-the-shelf hardware and software components, the MONSOON supervisor layer (MSL) is the highest level layer and this communicates with multiple Pixel-Acquisition-Node / Detector-Head-Electronics (PAN-DHE) pairs to co-ordinate the acquisition of the celestial data. The MSL is the MONSOON implementation of the GPX and this paper discusses the design requirements and the techniques used to meet them. Keywords: OUV-IR controllers, MONSOON, GPX 1. INTRODUCTION The MONSOON image acquisition system is documented in other papers in these proceedings 1, 2 and references therein. Rather than cover such ground again, we show in Figure 1 a schematic of the design of MONSOON as applied to the NOAO Extremely Wide-Field Infra-Red Mosaic (NEWFIRM) camera. 3, 4 Here, a single supervisor node controls two PAN-DHE pairs with data delivered to the data handling system (DHS) without flowing through the observation control system (OCS). The topic of this paper is the highest level of MONSOON software: the Supervisor Layer (MSL). 2. REQUIREMENTS The principal requirements, and desirable attributes consistent with the MONSOON paradigm, to be met by the supervisor layer are that it shall: 1. Be a single point-of-entry into a MONSOON system from (multiple) high level software (HLS) clients; 2. Understand and recognize GPX 5 commands only; 3. Handle connection security for protection of the focal plane; 4. Remain responsive at all times; 5. Maintain and monitor connections to a number of subservient PANs; 6. Send commands to subservient PANs; 7. Receive command responses from subservient PANs; 8. Return status information to HLS clients; 9. Respond, in a deterministic way, to error conditions; Further author information: (Send correspondence to PND) PND: pnd@noao.edu, NCB: ncb@noao.edu

MONSOON Supervisor Node ppxresponse gpxcommand gpxresponse ppxresponse ppxcommand Pixel/Meta Data NEWFIRM OCS Meta Data NEWFIRM DHS Pixel Acquisition Node (PAN) 1 Pixel Acquisition Node (PAN) 2 dhereply dhereply dhecmnd dhecmnd Detector Head Electronics (DHE) 1 Detector Head Electronics (DHE) 2 h/w signals h/w signals 4 x 2048x2048 FPA Figure 1. MONSOON Image Acquisition System as Applied to NEWFIRM. 10. Respond, in a deterministic way, to asynchronous messages generated by 1 or more PANs; 11. Provide a logging capability for post-mortem analysis; 12. Handle urgent messages; 13. Utilize common facilities provided by a freely-available OS: (a) Be a programming interface using sockets; (b) Use shared libraries (for code re-use); (c) Use shared memory, semaphores and/or queues as appropriate; (d) Run on a designated PAN or its own CPU-host system. Since a key requirement is that the supervisor remain responsive at all times, this rules out a polling approach. The supervisor must, therefore, accept commands and if such commands cannot be executed immediately record them for future execution in the order in which they were received. Urgent commands are defined as those that can usurp the normal order of command execution and be forced to execute immediately. For example, a gpxabort is an urgent command. Further analysis of the requirements for command storage and execution leads to the following desirable functionality: 1. Incoming commands should be stored in order for priority-based execution; 2. Pending commands can be saved to disk (to provide backup during error recovery, for example); 3. Saved commands can be restored (from disk) in a suitable order for execution (even whilst other pending commands are present via a suitable interweaving technique);

4. Urgent commands are flagged in a unique way so that they receive priority treatment; 5. The implementation should be efficient to provide low overhead during command searches. Simply numbering commands as they arrive (starting at 0 and increasing) can be done but the save/restore requirements along with the ability to handle urgent messages and recover after system reboots etc. means dynamic re-assignment to keep the command queue correctly ordered with, potentially, high overhead. Furthermore, maintaining such lists is unnecessarily complex. What is needed is a unique, monotonically increasing, time stamp that can be associated with each command. 3. MONSOON STAR DATES A MONSOON Star Date (MSD) can be thought of as a hyper-accurate Julian day (JD). That is, the MSD comprises the actual JD plus the fraction of a day since midnight (in the local time frame) accurate to 1 µs. Since the JD increases at midnight and we use the canonical gettimeofday() function to calculate the day-fraction, we guarantee that the MSD can never be repeated even after a machine reboot. So, we have developed a library of code for handling MSDs and their conversion to and from Julian days, modified Julian days, Lilian days, Gregorian dates and the ubiquitous yyyymmdd string format. This code is available as a MONSOON shared library, as a Tcl package and as loadable functions into a PostGreSQL database. An example MSD, as returned in Tcl, is: [monsoon@decapod]% wish % load $env(monsoon_lib)/libmsdtcl.so msd package v1.0.0, P. N. Daly, (c) AURA Inc, 2004. All rights reserved. % msd::msd 2453129.4587745796889067 Since the MSD is always unique and monotonically increases over time, its properties have distinct advantages in maintaining time-stamped lists: The latest (or newest) command to be added always has the maximum MSD; In normal priority mode, the oldest command is executed next; A FIFO buffer is handled by searching for the minimum MSD; A LIFO or FILO buffer is handled by searching for the maximum MSD; Urgency can be addressed by simple negation of the MSD. This last point is worthy of further discussion. First, it is the responsibility of the HLS client to issue commands in the correct execution sequence. Second, when such a command is accepted, it receives its associated MSD and both the MSD and the command are recorded in separate arrays but at the same array index. So, for example, let us say, we have a queue with the following MSD-stamped commands already present but that have yet to be executed: 2453129.4767786306329072 "gpxsetavp inttime=6.6" 2453129.4768044417724013 "gpxsetavp fsamples=16" 2453129.4768252740614116 "gpxsetavp coadds=2" Of course, the pedantic reader could argue that we can never guarantee such uniqueness since clock drift between two machines both of which are producer machines that can talk to a separate consumer machine can generate badly sequenced, or even non-unique, MSDs. This is why the ntpd daemon should be enabled on all such systems. Caveat emptor, caveat lector, Romani ite domum etc.

By searching the MSD array for the minimum value, we see that we can recover the order by simple, and efficient, array traversal. That is, the execution order (in this case) is the same as the order displayed in the example. This need not be the case as we can save the MSDs in a random order (depending on where the next available slot in the array is) and still obtain the next command in the correct sequence. Therefore, queue re-ordering is not required. What happens, though, if we need to precede a command with a prior command or send an urgent message? For example, suppose we wish to execute the above commands but precede them with a gpxsetmode FastIR so that the detector is setup in a given named mode. In this case, we simply obtain the next (monotonically increasing) MSD and negate it before filing so that the yet-to-be executed queue now looks like: 2453129.4767786306329072 "gpxsetavp inttime=6.6" 2453129.4768044417724013 "gpxsetavp fsamples=16" 2453129.4768252740614116 "gpxsetavp coadds=2" -2453129.4768352430633316 "gpxsetmode FastIR" Since the minimum MSD gets executed first, then, we recover the gpxsetmode FastIR before the gpxsetavp... commands. Thus, the use of MSDs is a simple, elegant and powerful technique for time-stamped queue management. 4. THE SUPERVISOR LAYER DESIGN The preliminary design of the MONSOON Supervisor Layer is shown in Figure 2 on page 5. Identifiable elements are described below. It is anticipated that some security mechanisms will be implemented using standard techniques such as firewalls, allowed hosts and authentication checking. Internal security techniques are not discussed here (for obvious reasons). 4.1. The gpxcmdstr t Shared Memory Segment The following shared memory segment is defined: #define GPX_MAXCOMMANDS 1024 #define GPX_MAXNODES 256 #define GPX_MAXMSG 4096 #define GPX_MAXGLOBALS 1024 typedef struct gpxcmdstruct { double gpxmsdinit; double gpxmsd[gpx_maxcommands]; long gpxglobals[gpx_maxglobals]; long gpxsysstatus[gpx_maxnodes]; char gpxcmnd[gpx_maxcommands][gpx_maxmsg]; char ppxcmnd[gpx_maxcommands][gpx_maxnodes][gpx_maxmsg]; char ppxresp[gpx_maxcommands][gpx_maxnodes][gpx_maxmsg]; long ppxrecv[gpx_maxcommands][gpx_maxnodes]; long ppxsent[gpx_maxcommands][gpx_maxnodes]; long ppxstat[gpx_maxcommands][gpx_maxnodes]; } gpxcmdstr_t, *gpxcmdstr_p, **gpxcmdstr_s; Note that it is a design decision to make this a static array. The contents of the array gpxglobals[] has yet to be fully determined but some elements are defined:

High Level Software Client(s), stdin etc. $MONSOON_CFG/monsoonClients.cfg $MONSOON_CFG/gpxDictionary.cfg gpxerror gpxcommand mslpansuper semcmdavailable mslpansent ppxcommand gpxgetstate semsyscheck mslsyscheck engineering log file double gpxmsdinit double gpxmsd[1024] long gpxsysstatus[256] long gpxglobals[1024] char gpxcmnd[1024][4096] char ppxcmnd[1024][256][4096] char ppxresp[1024][256][4096] long ppxrecv[1024][256] long ppxsent[1024][256] long ppxstat[1024][256] mslpanresponse mslpanrecv... pan 1 pan 2 pan 3 pan 4 pan 5 pan 6 pan 7 pan 8 pan 9 pan N...... gpxresponse semcmdresponse ppxresponse gpxasyncmsg Figure 2. MONSOON Supervisor Layer Preliminary Design.

#define GPX_GBE_SYSID 0 /* first array element */ #define GPX_GBL_SYSID 0xABCDEF00 #define GPX_GBE_STATUS 1 /* second array element */ #define GPX_GBL_OK 0x00000000 #define GPX_GBL_ERROR 0xFFFFFFFF #define GPX_GBL_WARNING 0xFFFFFFFE #define GPX_GBL_INFO 0xFFFFFFFD #define GPX_GBE_STATE 2 /* third array element */ #define GPX_GBL_READY 0x05011961 #define GPX_GBL_BUSY 0x18101995 #define GPX_GBL_PAUSE 0x22101959 #define GPX_GBL_INIT 0x02111991 4.2. mslpansuper This is the main entry point process into the MSL. On entry, mslpansuper checks to see that the username/password authenticates and, if so, allows access to the system. Thereafter, it creates and initializes the shared memory segment. In particular, the gpxmsd[] array is initialized with MAXDOUBLE values whilst other elements are initialized with 0 or NULL. mslpansuper also opens and listens on a well-known port for incoming connections and establishes a handler to deal with such connections. A logfile is also opened using the startup MSD, gpxmsdinit, as a unique name. It then enters a loop that can be terminated by a gpxexit command or an appropriate signal. Inside the loop, mslpansuper uses the select() mechanism to listen on n-client sockets plus stdin for commands. On receipt of a command, it does the following: 1. Scans the string for a known GPX command as the first or second element. If the command is not recognized, it immediately returns an error to the HLS client; 2. Checks gpxmsd[] for free slot availability. If a slot is available it is stored in local variable recno, otherwise it immediately returns an error to the HLS client; 3. Checks for a prefix MSD (i.e. viz., as the first element in the incoming command string). If present, it extracts it and records the given MSD/command in gpxmsd[recno], gpxcmnd[recno][0] respectively; 4. If no prefix MSD is present, generates a unique MSD and records the MSD/command in the appropriate slot; 5. Sets appropriate elements in the gpxglobals[] array; 6. If the queue is not paused, gives the counting semcmdavailable semaphore; 7. If the select() times-out, gives the semsyscheck semaphore; 8. Logs all the above actions to the logfile with appropriate MSD timestamps. Note that when the command is written into gpxcmnd[recno][0], it is always written with the MSD as a prefix. That is the command gpxsetavp inttime=6.6 associated with MSD 2453129.4767786306329072 is written into gpxcmnd[recno][0] as 2453129.4767786306329072 gpxsetavp inttime=6.6 as well as storing the MSD in gpxmsd[recno]. When the loop terminates, outstanding semaphores are given and released, the shared memory segment is detached and destroyed, all applicable sockets are closed and the logfile is closed. This is included for debugging and development purpose and will be removed for delivered systems.

4.3. mslpansent This is the process that sends commands to the PANs. On entry, it reads a configuration record that specifies the number of connected PANs, their IP-addresses and port numbers to use. It opens each socket connection for write-only and reports any dysfunctional connections. It then opens the GPX shared memory segment defined in 4.1, opens the shared logfile, and enters a loop terminated by gpxexit or an appropriate signal. Inside the loop, it waits on the semcmdavailable semaphore and, when received, does the following: 1. Finds the minimum value of the gpxmsd[] array. If no minimum exists, it continues from the top of the loop; 2. Finds the slot (and stores it in local variable recno) associated with the minimum MSD; 3. Converts the GPX command to a PPX command and writes them to ppxcmnd[recno][panid][0]; 4. Sends the PPX command to each socket and returns the write status into each ppxsent[recno][panid]; 5. Sets appropriate elements in the gpxglobals[] array; 6. Logs all the above actions to the logfile with appropriate MSD timestamps; 7. Takes the semcmdavailable semaphore. When the loop terminates, outstanding semaphores are given and released, the shared memory segment is detached, all applicable sockets are closed and the logfile is closed. 4.4. mslpanrecv This is the process that receives responses from the PANs. On entry, it reads a configuration record that specifies the number of connected PANs and their IP-addresses and port numbers to use. It opens each socket connection for read-only and reports any dysfunctional connections. It then opens the GPX shared memory segment defined in 4.1, opens the shared logfile, and enters a loop terminated by gpxexit or an appropriate signal. Inside the loop, it does the following: 1. Finds the minimum value of the gpxmsd[] array. If no minimum exists, it continues from the top of the loop; 2. Finds the slot (and stores it in local variable recno) associated with the minimum MSD; 3. Sets up an appropriate select() in a loop to receive replies; When a given socket descriptor becomes ready, read the stream and record the response in ppxresp[recno][panid][0]; Returns the read status or timeout flag into each ppxrecv[recno][panid]; Check incoming MSD with expected and, if different, treat this message as gpxasyncmsg; 4. Sets appropriate elements in the gpxglobals[] array; 5. Gives the semcmdresponse semaphore; 6. Logs all the above actions to the logfile with appropriate MSD timestamps. When the loop terminates, outstanding semaphores are given and released, the shared memory segment is detached, all applicable sockets are closed and the logfile is closed.

4.5. mslpanresponse This is the process that checks responses from the PANs. On entry, it opens a socket connection for write-only to the HLS client. It then opens the GPX shared memory segment defined in 4.1, opens the shared logfile, and enters a loop terminated by gpxexit or an appropriate signal. Inside the loop, it waits on the semcmdresponse semaphore and, when received, does the following: 1. Finds the minimum value of the gpxmsd[] array. If no minimum exists, it continues from the top of the loop; 2. Finds the slot (and stores it in local variable recno) associated with the minimum MSD; 3. Determines a cumulative status by checking: The contents of ppxcmnd[recno][panid][0] against the status in ppxsent[recno][panid]; The contents of ppxresp[recno][panid][0] against the status in ppxrecv[recno][panid]; The contents of ppxresp[recno][panid][0] against that expected from the command in ppxcmnd[recno][panid][0]; Records the status in ppxstat[recno][panid]; 4. Based on the above, sends an appropriate response to the HLS client; 5. Sets appropriate elements in the gpxglobals[] array; 6. Logs all the above actions to the logfile with appropriate MSD timestamps. 7. Re-initializes the now obsolete slot to make it available for further commands; 8. Takes the semcmdresponse semaphore. When the loop terminates, the shared memory segment is detached, all applicable sockets are closed and the logfile is closed. 4.6. mslsyscheck This is the process that checks on system wellness from time to time. On entry, it opens a socket connection for write-only to the HLS client. It then opens the GPX shared memory segment defined in 4.1, opens the shared logfile, and enters a loop terminated by gpxexit or an appropriate signal. Inside the loop, it waits on the semsyscheck semaphore and, when received, does the following: 1. Checks the gpxglobals[] array for any suspicious values and reports them to HLS client; 2. Checks the gpxsysstatus[] array for any suspicious values and reports them to HLS client; 3. Sends an urgent gpxgetstate to mslpansuper to force a check of all PANs availability (from time to time); 4. Sets appropriate elements in the gpxglobals[] array; 5. Logs all the above actions to the logfile with appropriate MSD timestamps. 6. Takes the semsyscheck semaphore. When the loop terminates, the shared memory segment is detached, all applicable sockets are closed and the logfile is closed.

5. FUTURE WORK The design presented in 4 has yet to be coded and, no doubt, difficulties will arise as use-cases are tested against it. We believe, however, that the design meets all the requirements of a preliminary stage coding. Nevertheless, we can foresee the design changing to allow for: Authenticating the unique 128-byte identifier code on each master control board; Configuration and named mode select via database access using the 128-byte code as a master key; GPX 1-to-many mapping to the PPX. In the above design, each GPX command is passed wholesale to the subservient PANs. However, there are instances when GPX commands with many arguments can be mapped to several single-argument PPX commands which this design does not, yet, address. REFERENCES 1. N. C. Buchholz and P. N. Daly, 2004, The MONSOON Generic Pixel Server Software Design, Proc. SPIE Vol. 5496, Advanced Software, Control, and Communication Systems for Astronomy, Hilton Lewis, Gianni Raffi, Eds. (this volume). 2. P. N. Daly, N. C. Buchholz and P. Moore, 2004, Automated Software Configuration in the MONSOON System, Proc. SPIE Vol. 5496, Advanced Software, Control, and Communication Systems for Astronomy, Hilton Lewis, Gianni Raffi, Eds. (this volume). 3. R. G. Autry, R. G. Probst, B. M. Starr, K. M. Abdel-Gawad, R. D. Blakley, P. N. Daly, R. Dominguez, E. A. Hileman, M. Liang, E. T. Pearson, R. A. Shaw and D. Tody, 2002, NEWFIRM: the wide-field IR imager for NOAO 4-m telescopes, Proc. SPIE Vol. 4841, Instrument Design and Performance for Optical/Infrared Ground-based Telescopes, Masanori Iye, Alan F. Moorwood, Eds. pp525-539. 4. R. G. Probst, N. Gaughan, G. Chisholm, P. N. Daly, E. A. Hileman, M. Hunten, M. Liang, K. M. Merrill, and J. Penegor, 2004, Project Status of NEWFIRM: the wide-field infrared camera for NOAO 4-m telescopes, Proc. SPIE Vol. 5492, Ground-based Instrumentation for Astronomy, Masanori Iye, Alan F. Moorwood, Eds. (in press). 5. N. C. Buchholz and P. N. Daly, 2004, The Generic Pixel Server Dictionary, Proc. SPIE Vol. 5496, Advanced Software, Control, and Communication Systems for Astronomy, Hilton Lewis, Gianni Raffi, Eds. (this volume).