Network Remote Job Entry Programı - NETRJS
Network Working Group — G. Hicks
Request for Comments: 325
N.I.C. #: 9632
Tarih: 6 Nisan 1972
Ekim 1971’den beri Utah Üniversitesi’nde, sürekli olarak çalışan ve hesaplama açısından çok yoğun olan işlerimiz bulunmaktadır. Bu işler, PDP-10 sistemimiz üzerinde diğer Tenex kullanıcıları için yanıt süresini düşürmüştür.
Şubat ayından bu yana UCLA 360/91 sistemine işler göndermekteyiz. Normal çalışma biçimimiz aşağıda şematik olarak gösterilmiştir.
+---------------+ +---------------+
______ | UTAH | NETWORK | UCLA |
/ \ | +---------+ | | +---------+ |
+ + | | | | / / | | | |
|\______/| | | |>-|-------/ /------|->| | |
| |----+--| NETRJS | | : / / |: | RJS | |
| FILE | | | |<-|-----/ /--------|-<| | |
| SYSTEM | | | | | / / | | | |
\ / | +---------+ | | +---------+ |
\______/ | | | | |
+-------|-------+ +---------------+
KULLANICI
NETRJS’i kullanmak için kullanıcı, Tenex sistemi altında bir iş dosyası oluşturur. Daha sonra NETRJS’ten bu dosyayı UCLA RJS (Remote Job Service System) sistemine göndermesini ister. NETRJS kullanılarak kullanıcı, işinin ilerleme durumunu izleyebilir. RJS, iş çıktısının alınmaya hazır olduğunu kullanıcıya bildirdiğinde, kullanıcı NETRJS’ten çıktısını ("basılmış" ya da "delinmiş") yerel bir dosyaya geri almasını isteyebilir.
Kaynak Program Nereden Alınır
Kaynak programın bir kopyası aşağıdaki kişiyle iletişime geçilerek temin edilebilir:
- Gregory P. Hicks
Computer Science Department
Merrill Engineering Building 3160
University of Utah
Salt Lake City, Utah 84112
(801) 531-8224
UCLA Remote Job Service
RJS aracılığıyla UCLA 360/91 sistemini kullanmak için aşağıdakiler gereklidir:
- UCLA’da geçerli bir hesaba sahip olmak
- Atanmış bir RJS terminal kimliğine sahip olmak
Bunların her ikisi de aşağıdaki kişiden temin edilebilir:
- Bob Braden
UCLA
Math Sciences Building
3531 Boelter Hall
Los Angeles, Calif. 90024
(213) 825-7518
Bu belgenin geri kalanında program daha ayrıntılı olarak açıklanmakta ve bir kullanıcının programını UCLA’da çalıştırmak için gerekli adımlar tanımlanmaktadır.
Problemin Tanımı
Bazı işler, etkileşimli kullanıcılar için yanıt süresini ciddi biçimde etkileyecek kadar uzun süre hesaplama açısından yoğundur. Bunlar on saatten başlayarak daha uzun süre çalışan işlerdir. Bu tür işler için başka bir bilgisayara ihtiyaç duyulmuştur. UCLA-CCN 360/91 sistemi önerilmiştir. 360/91, esas olarak toplu işleme türünde bir sistemdir ve doğal olarak saatlerce çalışan işlere göre ayarlanmıştır. UCLA’da, doğrudan iletişim hatları veya ARPANET üzerinden uzak terminaller aracılığıyla iş gönderilmesine olanak tanıyan yazılımlar mevcuttur.
Program Nasıl ve Neden Yazıldı
UCLA’nın yazılımı, uzak terminallerin kullanıcıya herhangi bir ücret yansıtılmadan sınırsız bağlantı süresine (yani terminalin fiilen 360/91’e bağlı olduğu süreye) sahip olmasına olanak tanıyordu. UCLA’daki yazılım, aynı anda açık olan her bağlantı için her terminale 2k (2048 S/360 baytı) çekirdek bellek ayrılmasını gerektiriyordu. Her terminalin sanal bir kart okuyucu, sanal bir satır yazıcısı ve sanal bir kart deliciye sahip olabildiği düşünüldüğünde, tek bir terminal UCLA’da 10k çekirdek bellek kullanabiliyordu. Bu durum —UCLA sistem personeline göre— tüm portlar aynı anda dolu olursa sisteme ağır bir yük bindiriyordu.
Bu durumu hafifletmek için —bir tasarım kararı olarak— çeşitli bağlantıların açılmasının operatör tarafından istenmesine karar verildi. Operatör aynı anda üçten fazla bağlantıya sahip olamazdı. İki operatör bağlantısına ek olarak aşağıdakilerden yalnızca biri aynı anda açık olabilirdi:
- A) Sanal satır yazıcısı
- B) Sanal kart okuyucu
- C) Sanal kart delici
Bu durum, çıktısının kendisine otomatik olarak gönderilmesini bekleyen bir programa sahip bir operatöre kıyasla operatörün daha etkin olmasına neden olurdu. Ancak, uzak (UCLA) sistem üzerindeki yükün azalması sayesinde, geri dönüş süresi muhtemelen tüm uzak RJS kullanıcılarının tüm bağlantıları açık tuttuğu duruma göre daha hızlıydı.
NETRJS İçin Gerekli Veri Tabloları
NETRJS’in, UCLA’da hangi terminal kimliklerinin geçerli olduğuna dair "yerleşik" bir bilgisi yoktur. Bu bilgi, disk üzerinde PWD.SAV adlı bir dosyada tutulur. Bu bilgiyi NETRJS için oluşturan ve güncelleyen bir program bulunmaktadır. Bu nedenle NETRJS site bağımsızdır. ARPANET’i kullanabilen herhangi bir TENEX sistemi üzerinden çalışabilir.
Komut Yorumlayıcısı
NETRJS, R. S. Tomlinson’ın TELNET komut yorumlayıcısını temel almış ve onun komutlarını UCLA’da bir program çalıştırmak için gereken komutlarla değiştirmiştir. TELNET’te olduğu gibi, komut yorumlayıcısı kısmen yazılmış komutları tanır. Bir komutu tanıyabilmek için yeterli bilgi yoksa, operatöre bu durum bildirilecektir.
NETRJS’e Ait İşletim Komutları
Kullanılabilir komutlar şunlardır:
- SEND.FILE.NAMED
- RETRIEVE.OUTPUT.FROM
- Burada mevcut seçenekler:
- a) PRINTER
- b) PUNCH
- Punch altında seçenekler:
- i) Bir nesne destesi alma veya
- ii) Bir ASCII dosyası alma
- Punch altında seçenekler:
- Burada mevcut seçenekler:
- TIME.NOW.IS
- LOGOUT
- RESTART
- DISCONNECT
- QUIT
- SYSTAT
- JOBSTAT
- ?
- ^Q
Şimdi bu komutların ne yaptığını açıklayalım.
SEND.FILE.NAMED
Operatöre diskteki programının adını sorar, bunu kart görüntülerine dönüştürür ve dosyayı UCLA’daki Remote Job Service’e gönderir. Dosya UCLA tarafından kabul edildiğinde, operatör kaç kartın okunduğunu ve işinin adını belirten bir onay mesajı alır. Bu noktada operatör RJS’ten çıkış yapabilir ve daha sonra çıktısını almak için geri dönebilir.
RETRIEVE.OUTPUT.FROM
Operatöre çıktının hangi sanal aygıt üzerinde bulunduğunu sorar. Operatör yazıcıyı veya delgiyi seçebilir.
TIME.NOW.IS
Kullanıcının bilgisi için saati gösterir.
RESTART
Oldukça saf bir NETRJS durumu üretir. Bu komut yalnızca son çare olarak kullanılmalıdır, çünkü adeta "her şeyi sıfırlar".
LOGOUT
Tam olarak bunu yapar. Kullanıcıyı hem yerel hem de uzak işinden çıkarır. Bir onay satır sonu (carriage return) gerektirir; aksi halde hiçbir işlem yapmaz.
DISCONNECT
Kullanıcıyı uzak işten çıkarır ve onunla uzak bilgisayar arasındaki tüm bağlantıları keser.
QUIT
NETRJS programının sonlandırılması için önerilen tek yoldur. Program, herhangi bir zarar olmadan daha sonra devam ettirilebilir.
JOBSTAT
RJS’in hâlâ etkin olan ve uzak terminal tarafından gönderilmiş tüm işlerin durumunu göstermesini sağlar.
SYSTAT
RJS’in, şu anda hangi uzak terminallerin RJS sistemini kullandığını operatöre bildirmesini sağlar.
?
Birden fazla işlevi vardır. Komut düzeyindeyken NETRJS’in operatörden sırada ne beklediğini bildirmesini sağlar. Hiçbir şey yazılmamışsa, tüm üst düzey komutları listeler. Bir şey girilmişse, o harflerle başlayan tüm komutları listeler. TELNET’te olduğu gibi, yasa dışı olan hiçbir şeyi görmez. Dosya gönderilirken veya alınırken ?, NETRJS’in o ana kadarki ilerlemesini yazmasını sağlar. Bu mesaj, hâlen işlenen aktarımın sonunda yazılır. Bu nedenle mesajın yazılması birkaç dakika sürebilir.
^Q
Bu komut, şu şekilde kullanıldığında oldukça yararlı bir iptal olanağı sağlar: ^Q ^C, NETRJS’i sonlandırır. Bu komut komut yorumlayıcısı tarafından yorumlanmaz. Programın gönderim (konsol) kısmı tarafından algılanır. Her durumda program devam ettirilemez.
Nasıl çalışır: Bu komut, exec içindeki ^C’yi yeniden etkinleştirir ve konsolun herhangi bir şey yapmasını durdurur (örneğin UCLA’ya mesaj göndermek, UCLA’daki sistem durumunu öğrenmek vb.). Bu komut için önerilen sıra (kullanılması gerekiyorsa) ^Q^C’dir. Bu nedenle program hâlâ işlem yapmaktadır ancak operatör onunla iletişim kuramaz.
UCLA’daki RJS İçin Kullanışlı Komutlar
RJS kullanıcısı için mevcut olan daha yararlı komutlardan bazıları şunlardır:
SIGNOFF
RJS’e kullanıcının oturumu sonlandırmak istediğini bildirir. Etkin çıktı akışı yoksa, çıkış kabul edilir. Etkin çıktı akışları varsa, RJS bunlar tamamlanana kadar bekler.
RESTART (RST)
Belirtilen aygıtı/işi yeniden başlatır. Kullanılabilir aygıtlar (şu anda): PRINTER1 ve PUNCH1. Kullanıcı iş adını belirtebilir. Bu, işinin (çıktı için) baştan yeniden başlatılmasını sağlar. Restart komutunun biçimi şöyledir:
RESTART (device or jobname[,JOB])
Yapılan işlemi belirten bir onay mesajı gönderilecektir.
STATUS SYSTEM
Operatöre şu anda hangi uzak terminallerin RJS sistemini kullandığını bildirir. Ayrıca, status system kullanıcının terminalinden gönderilmiş ve hâlen sistemde bulunan tüm işlerin durumunu da içerir. İzin verilen tek kısaltma system için SYS’tir.
STATUS JOB
Operatöre, terminaline geri gönderilmeyi bekleyen bir çıktı olup olmadığını bildirir. Ayrıca çalıştırılmakta olan işler varsa bunu da belirtir. Bu komut, kullanıcının RJS’e her girişinde çalıştırılmalıdır. İzin verilen kısaltma: JOB için J.
NETRJS Denetim Karakterleri
NETRJS için kaçış karakteri ^S kontrol karakteridir. Bu, uzak sitelerin (ve kullanıcıların!) programı kullanabilmesi ve TELNET ile akıl sağlığını koruyabilmesi için belirlenmiştir. Bu karakter sizi her zaman NETRJS’in komut düzeyine geri döndürür. Bir hata yaptığınızı düşündüğünüzde (örneğin program yazarken) ve bir gönderimi iptal etmek istediğinizde oldukça yararlıdır.
Başka bir deyişle, bir gönderim ya da alma işlemi sırasında ^S yapıp kaldığınız yerden devam edebileceğinizi düşünmeyin. Şu anda bu mümkün değildir. Daha sonraki bir uygulamada, yazıcıyı, delgiyi veya okuyucuyu durdurma (ve istenirse devam ettirme) olanağıyla birlikte mümkün olabilir.
Altı çizili olan her şey kullanıcı tarafından yazılmalıdır.
NETRJS Kullanılarak Örnek Oturum
UTAH TENEX 1.28.03, JANUARY 31, 1972 EXPC 1.33.3
[1] (USER) HICKS
(PASSWORD)
(ACCOUNT #) 500
JOB 6 ON TTY21 1-APR-72 10:12
RUN NETRJS
<<UCLA91 IS UP.>>
NRJ8761 NETWORK REMOTE JOB SERVICE READY
RJS7501 TERMINAL NETUTAH1 HAS SIGNED ONTO RJS
RJS6601 NO ALERTS OUTSTANDING
(^S)
<<?
RETRIEVE.OUTPUT.FROM
SEND.FILE.NAMED
DISCONNECT
QUIT
RESTART
TIME.NOW.IS
LOGOUT
DDT
UCLA91
SYSTAT
SEND.FILE.NAMED TEST.F4;1
?
5 RECORDS TRANSFERRED.
FILE TEST.F4;1 HAS BEEN SENT.
12 RECORDS TRANSFERRED.
MORE FILES TO BE SENT? (Y OR N) Y
INPUT FILE: TEST.DAT;1
?
40 RECORDS TRANSFERRED.
FILE TEST.DAT;1 HAS BEEN SENT.
100 RECORDS TRANSFERRED.
MORE FILES TO BE SENT? (Y OR N) N
RJS534I JOB NETUTAH1 ACCEPTED BY RJS - 0000112 CARDS READ
<<SYSTAT >>
RJS802I TERMINAL NETUTAH1 HAS 1 SPL JOB(S)
RJS800I TERMINAL GSM ACTIVE AN LINE1
RJS909I PUNCH REROUTE = ENGR
RJS800I TERMINAL NETILL ACTIVE ON LINE8
RJS800I TERMINAL NETUTAH1 ACTIVE ON LINE11
STATUS JOB
RJS810I TERMINAL NETUTAH1 HAS THE FOLLOWING JOBS ON RJS
RJS812I NETUTAH1 SPL(A) 001
RJS481I PRINT OUTPUT FOR JOB NETUTAH1 NOW AVAILABLE, PRTY=030, IMMED
RJS481I PUNCH OUTPUT FOR JOB NETUTAH1 NOW AVAILABLE, PRTY=060, IMMED
<<RETRIEVE.OUTPUT.FROM PRINTER
GOING TO FILE NAMED TEST.PRT [NEW FILE]
RJS783I TERMINAL STATUS CHANGED
?
99 RECORDS TRANSFERRED.
STATUS JOB
RJS809I TERMINAL NETUTAH1 HAS THE FOLLOWING JOBS IN RJS
RJS800I NETUTAH1 PRT(A) 060
?
169 RECORDS TRANSFERRED.
YOUR OUTPUT IS HERE.
217 RECORDS AND 16119 BYTES TRANSFERRED.>>
<<RETRIEVE.OUTPUT.FROM PUNCH
WILL THIS BE AN OBJECT DECK (O)
OR AN ASCII FILE (A)?? ASCII
GOING TO FILE NAMED TEST.PUJ [NEW FILE]
RJS783I TERMINAL STATUS CHANGED
YOUR OUTPUT IS HERE.
17 RECORDS AND 1222 BYTES TRANSFERRED.>>
SIGNOFF
RJS751I TERMINAL NETUTAH1 HAS REQUESTED SIGNOFF FROM RJS
NRJ898I SIGNOFF ACCEPTED
@
Operatör Konsolu Etkin Olduğunda
NETRJS istem karakteri <<’dir. Bu, programın komut kabul etmeye hazır olduğunu gösterir. >> yazdırıldığında konsol uzak moddadır. Bu noktada yazılan her şey doğrudan RJS’e gider. Dosya gönderilirken veya alınırken, >> henüz yazdırılmamış olsa bile operatör isterse RJS ile iletişim kurabilir. Operatör konsolu, NETRJS komut düzeyinde olmadığı sürece her zaman uzak moddadır.
AĞ ÜZERİNDE DÜZENLEME
Hata yapmanıza ve ardından bunları düzeltmenize olanak tanıyan iki kontrol karakteri vardır. Bunlardan biri control-x’tir. Bu, RJS’e son satırınızı yok saymasını bildirir. Bu durum ___ ile yankılanır. Diğeri control-h’tir. Bu, UCLA’nın hemen öncesindeki karakteri yok saymasına neden olur. Bu _ ile yankılanır ve silinen karakterin yankısı verilmez.
SEKME VE DİĞER KULLANIŞLI ÖZELLİKLER
TENEX altında program yazan çoğu kişi, teletype üzerinde sağlanan sekme duraklarını kullanmayı sever. Bu nedenle bunları ayarlamak için uygun bir değer gerekiyordu. NETRJS çalıştırılırken kullanıcı, sekme duraklarının her 8 sütunda bir ayarlandığını bilmelidir. Başka bir deyişle, bir sekme ile başlayan satırda ilk karakter (kart) 8. sütunda yer alır. Program, TENEX eol ve cr lf gibi hemen her tür <eol> göstergesini kabul eder.
(Bu arada, bunların sırası önemli değildir.) Program ayrıca boş satırları siler ve kullanıcı Fortran gibi bir dilde yazılmış bir programla veri üretmek isteyebileceğinden, null (00) karakterlerini de yok sayar. Bir veri dosyası alınırken program <eol> için <cr> ve <lf> kullanır. Bu, çıktının QED, DED, SOS vb. metin düzenleyicilerle uyumlu kalmasını sağlamak içindir.
DOSYA BİÇİMİ
UCLA’ya bir dosya gönderilirken satır başına 80 karakterlik bir sınır vardır. Bu, OS/360’a giden işlerin satır başına 80 karakterden uzun olmaması gerektiği yönündeki bir tasarım kısıtıdır. (Unutmayın, IBM hâlâ kart odaklıdır...) NETRJS, bu sınırı aşan bir satır bulursa operatör oldukça tatsız (eh... en azından yarı tatsız) bir mesaj alacaktır. Çıktı dosyası için, kullanılan programlama dilinin dayattığı sınırlar dışında satır uzunluğuna bir kısıtlama yoktur; bu da 255 karaktere kadar çıkabilir. Kullanıcı bir punch dosyasını geri aldığında, birkaç ek satırın eklendiğini görebilir. Bu, UCLA tarafından, kullanıcının kart delicide delinmiş desteyi tanıyabilmesini sağlamak amacıyla yapılır.
Bu RFC, çevrimiçi RFC arşivlerine girilmek üzere Elias Lofgren tarafından makine tarafından okunabilir biçime dönüştürülmüştür.