Document 12969718

advertisement
 ! The project team felt that the objectives could not be met with a traditional
design approach. Structured analysis with real-time extensions and
structured design provided an effective alternative.
! •
•
•
•
'(2 / /$1 #$2"1(!$2 3'$ 42$ .% 2314"341$# - +82(2 6(3' 1$ +9
3(,$ $73$-2(.-2 -# 2314"341$# #$2(&- (- 3'$ 1$#$2(&- .% 3'$
3$1,(- + -# 2$1( + /1(-3$1 #1(5$1 %.1 3'$ ( ./$1 3(-&
2823$, .- 3'$ ".,/43$1 2823$, '$ 1$#$2(&- /1.)9
$"3 .!)$"3(5$2 6$1$ 3.
(-3 (- 3'$ "411$-3 !+."* ,.#$ /$1%.1, -"$ 3'$ , (,.#$ .% # 3 31 -2%$1 %.1 3$1,(- + (2 3. 31 -2%$1
"' 1 "3$12 (- !+."*2 .% # 3 ,/1.5$ 31 -2 "3(.- /1."$22(-& /$1%.1, -"$ .(-#42318923 -# 1# !$-"', 1*2 !8 3. 3'1.4&'
3. 1$#4"3(.- (- 3'$ 3$1,(- + #1(5$1 / 3' +$-&3'2
(-3 (- 3'$ "411$-3 +$5$+ .% %4-"3(.- +(38
1.#4"$ '(&'904 +(38 24//.13 !+$ -# , (-3 (- !+$
/1.#4"3
'$ /1.)$"3 3$ , %$+3 6$ ".4+# -.3 "'($5$ 3'$2$ &. +2 6(3'
3'$ 3'$-9"411$-3 #$5$+./,$-3 3$"'-(04$2 !)$"39.1($-3$#
,$3'.#2 6$1$ 14+$# .43 !$" 42$ .% 3'$ /$1%.1, -"$ 1$04(1$9
,$-32 $ $+$"3$# 3. 42$ 2314"341$# - +82(2 6(3' 1$ +93(,$
$73$-2(.-2 -# 2314"341$# #$2(&-
61(3$ ".-" 3 /1."$#41$ /1."$22$2 61(3$2 1$"$(5$# %1., 3'$
3$1,(- + 23.1 &$ , - &$1 -# 2$-#2 3'$, 3. 3'$ 3$1,(- +
-# 2$1( + /1(-3$1 #$5("$ , - &$1 (3 /1.5(#$2 % 23$1 61(3$
/ 3' %.1 3$1,(- +2 '$ 3$1,(- + -# 2$1( + /1(-3$1 #$5("$
, - &$1 ".,,4-(" 3$2 1$ # 61(3$ -# ".-31.+ (-%.1, 3(.3. 3'$ # 3 ".,,4-(" 3(.- -# 3$1,(- + ".-31.++$1 3'1.4&' 3'$ 5$23 $5("$ .-31.+ 1.3.".+ '$ +.6$1 (-3$19
% "$ .% 3'(2 /1.3.".+ (2 3'$ %+.6 ".-31.+ , - &$1 '$ %+.6
".-31.+ , - &$1 /1.5(#$2 1$+( !+$ 31 -2/.13 !$36$$- 3'$ -# 3'$ !8 (,/+$,$-3(-& 31 -2/.13 /1.3.".+
" ++$# 3'$ 5$23 +.6 .-31.+ 1.3.".+ '$ 23.1 &$ , - &9
$12 -# % 23 61(3$ ".-" 3 /1."$#41$ 1$ (-5.*$# !8 /1."$9
#41$ " ++2 '$ (-3$1% "$ !$36$$- 3'$ .3'$1 ,.#4+$2 (- 3'$
#1(5$1 -# 3'$ ./$1 3(-& 2823$, (2 ,$22 &$9! 2$# 5( ( /.132
File System
Storage Managers
'$ .1(&(- + #1(5$1 6 2 ! 2$# .- 3'$ 3$1,(- + #1(5$1 .% 3'$
./$1 3(-& 2823$, 41(-& (32 #$2(&- 2/$"(%(9
" 3(.- .% 3'$ 3$1,(- + -# /1(-3$1 24!2823$, 6 2 4-"+$ 1 -#
+$# 3. , -8 /1.!+$,2 (-"$ 3'$ .1(&(- + #1(5$1 ' # ##$#
, -8 %$ 341$2 2(-"$ (32 %(123 1$+$ 2$ (3 6 2 (,/.13 -3 3. ' 5$
".,/+$3$ 2/$"(%(" 3(.- .% 3'$ 24!2823$, 3. ,$$3 3'$ /1.)9
$"3 &. +2 314"341$# - +82(2 /1.5(#$# 3'(2
'$ .1(&(- + #1(5$1 ".-2(232 .% 2$5$- ,.#4+$2 3' 3 ' -#+$ 3'$
!$36$$- 3'$ %(+$ 2823$, 3'$ ( ./$1 3(-&
2823$, -# 3'$ # 3 ".,,4-(" 3(.- -# 3$1,(- + ".-31.++$1
(& '$1$ 1$ 36. 23.1 &$ , - &$12 '$ 3$1,(9
- + 23.1 &$ , - &$1 /1.5(#$2 3'$ (-3$1% "$ !$36$$- %(+$ 2823$, 1$ # -# 61(3$ (-31(-2(" " ++2 -# 3'$ 3$1,(- +
+.&(" + #$5("$ , - &$1 .1 % 23 61(3$ ".-" 3 /1."$#41$ '$
2$1( + /1(-3$1 23.1 &$ , - &$1 /1.5(#$2 3'$ (-3$1% "$ !$36$$ %(+$ 2823$, 61(3$ (-31(-2(" " ++2 -# 3'$ 2$1( + /1(-3$1
+.&(" + #$5("$ , - &$1 (&'9+$5$+ (2 3'$ .+# / 3' !$9
36$$- 3'$ %(+$ 2823$, -# 3'$ +.&(" + #$5("$ , - &$12 3
&$-$1 ++8 ' -#+$2 -.-91$ #61(3$ ".-31.+2 ./$-2
"+.2$2 '$1$ 1$ 36. +.&(" + #$5("$ , - &$12 .-$ %.1 3$19
,(- +2 -# .-$ %.1 2$1( + /1(-3$12 '$ +.&(" + #$5("$ , - &9
$12 31 -2%$1 # 3 !$36$$- 3'$ 42$1 23 "* -# 3'$ # 3 ".,9
,4-(" 3(.- !4%%$12 %.1 1$ #2 61(3$2 -# ".-31.+2 '$ % 23
4&423 $6+$339 "* 1# .41- +
High-Level I/O
Logical Device
Managers
Fast Write Concat
Terminal and
Serial Printer
Device
Manager
Flow Control
Manager
LAN Driver
Fig. 1. 1(&(- + #1(5$1 1"'(3$"341$
File System
Storage
Manager
High-Level I/O
Fast I/O Manager
(Process Stack)
Deferred I/O
Manager
Logical Layer
Inbound I/O
Manager
Logical Layer
Logical Layer
Device Control
Layer (ADCP)
Transport Layer
(AFCP)
Device Control
Layer (ADCP)
Transport Layer
(AFCP)
Device Control
Layer (ADCP)
Transport Layer
(AFCP)
&,"*#1 "#$#00#" 0#/3#121 $0-+ 2&# $12 +,%#0 ," 0#/3#121 2&2 0# +"# 2&0-3%& 2&# 9-*" &'%&:*#4#* .2&
13!& 1 -.#, !*-1# ," .0##+.2'4# 50'2#1 &# ', -3,"
+,%#0 *1- &1 +#11%#: 1#" ',2#0$!# 2 0#!#'4#1
', -3," .!)#21 $0-+ 2&# "0'4#0 $ 2&# .!)#2 '1 0#.*7
2- , 0#/3#12 2&# ', -3," +,%#0 1#,"1 +#1:
1%# 2- #'2&#0 2&# $12 +,%#0 -0 2&# "#$#00#" +,:
%#0 "#.#,"',% -, 5&'!& -$ 2&# 25- ','2'2#" 2&# 0#/3#12 2
*1- &,"*#1 17,!&0-,-31 #4#,21
&#0# 51 1-+# !-,!#0, 2&2 1203!230#" ,*71'1 ," 1203!:
230#" "#1'%, "-!3+#,21 5-3*" ,-2 $'2 ',2- "-!3+#,21 .0-:
"3!#" 7 2&# .0-"3!2 *'$# !7!*# '2& -30 0#!#,2*7 0#4'1#"
*'$# !7!*# 2&'1 230,#" -32 2- ,-2 # , '113# 30 1-$250#
.0-"3!2 *'$# !7!*# !-,2',1 2&# $-**-5',% .&1#1 ," .0-"3!#1
2&# $-**-5',% * "-!3+#,21
Phase
LAN Driver
Method
0-.-1*
,4#12'%2'-,
ADCP = Avesta Device Control Protocol
AFCP = Avesta Flow Control Protocol
Fig. 2. #"#1'%,#" "0'4#0 0!&'2#!230#
&# ,#5 0#"#1'%,#" "0'4#0 !-,1'121 -$ 2&0## +-"3*#1 5'2&
2&0## *7#01 ', #!& +-"3*# '% &# 2&0## *7#01 0#
*-%'!* "#4'!# ," 20,1.-02 &# *-%'!* *7#0 !/3'0#1 2&#
0#1-30!#1 ,##"#" 2- !-+.*#2# 2&# 0#/3#12 ," 20,1$#01
2&# "2 $0-+ 2- 2&# 31#0 12!) ',2- -32 -$ "2 !-++3:
,'!2'-, 3$$#0 &# "#4'!# *7#0 &,"*#1 2&# 4#12 #4'!#
-,20-* 0-2-!-* 5&'!& '1 2&# +#!&,'1+ 2- !-++3,'!2#
5'2& 2&# &# 20,1.-02 *7#0 '+.*#+#,21 2&# 4#12
*-5 -,20-* 0-2-!-* 20,1.-02 .0-2-!-* ," ',2#0$!#1
5'2& 2&# "0'4#0
&# 2&0## +-"3*#1 ', 2&# 0#"#1'%,#" "0'4#0 0# 2&# $12 +,%#0 2&# "#$#00#" +,%#0 ," 2&# ', -3," +,%#0 &# $12 +,%#0 '1 ',4-)#" 7 2&# $'*# 1712#+
5'2& .0-!#"30# !** 2 &,"*#1 2&# +-12 !-++-,*7 #6#:
!32#" 0#"1 50'2#1 ," 2#0+',* !-,20-*1 #% !&,%#
1.##" .0'27 #2! 2 22#+.21 2- .0-!#11 #!& 0#/3#12 2!-+.*#2'-, $ '2 !,,-2 !-+.*#2# 2&# .0-!#11',% #!31# -$
2&# *!) -$ 1-+# 0#1-30!# 2&# $12 +,%#0 5'** *-!)
3,2'* 2&# 0#1-30!# '1 4'* *# $ 2&# !,,-2 # *-!)#"
'# '2 '1 ,-:5'2 2&#, 2&# $12 +,%#0 1#,"1 2&#
2- 2&# "#$#00#" +,%#0 $ 2&# 0#/3#12 !,,-2 #
!-+.*#2#" #!31# 2&# 95',"-5 '1 !*-1#" 2 2&# 20,1.-02
*#4#* 2&# 0#/3#12 '1 *1- 1#,2 2- 2&# "#$#00#" +,%#0
&# "#$#00#" +,%#0 &1 +#11%#: 1#" ',2#0$!# 2
,4#12'%2'-, #.-02
#4#*-.+#,2
.#!'$7
#1'%,
2& 20!# 32'*'27 20!#1 -$ 2&# -0'%',* "0'4#0 5#0# ,*78#"
2- "#2#0+',# %--" -..-023,'2'#1 $-0 .2& 0#"3!2'-, &# 0#"#:
1'%, 0!&'2#!230# 2&#, ',!-0.-02#" 2&# #12 0#"3!2'-, '"#1
&# .#0$-0+,!# '+.0-4#+#,2 '1 %',#" $0-+ 120#+*',',%
2&# .2& $-0 2&# +-12 !-++-, 2&0-3%& 2&# 31# -$ "'0#!2
.0-!#"30# !**1 ," $0-+ "#1'%, #+.&1'8',% #$$'!'#,2
-.#02'-,
Document
203!230#"
,*71'1
203!230#"
#1'%,
,2#%02'-,#12
62#0,* .#!'$'!2'-,
,2#0,* .#!'$'!2'-,
,2#0,* #1'%,
#12 *,
3..-02
'1!-,2',3,!#
&# #62#0,* 1.#!'$'!2'-, "-!3+#,2 "#1!0' #1 2&# #,4'0-,:
+#,2 ', 5&'!& 2&# .0-"3!2 -.#02#1 2&# $3,!2'-,* !. '*':
2'#1 -$ 2&# .0-"3!2 ," 2&# "#2'*1 -$ 2&# .0-"3!21 31#0
',2#0$!# &# ',2#0,* 1.#!'$'!2'-, "#1!0' #1 2&# ',2#0,*
0#/3'0#+#,21 -$ 2&# 1712#+ ," 2&# ',2#0,* ',2#0$!#1 #:
25##, 2&# 1712#+ !-+.-,#,21 &# ',2#0,* "#1'%, !-,2',1
2&# !-+.*#2# "#2'*#" "#1!0'.2'-, -$ 2&# *%-0'2&+1 ," "2
1203!230#1 2- # 31#" ', 2&# '+.*#+#,22'-, -$ 2&# .0-"3!2
&# 2#12 .*, -32*',#1 2&# 27.#1 -$ 2#121 2- # 31#" 2- %30:
,2## 2&# /3*'27 -$ 2&# $','1&#" .0-"3!2 3.-, 0#*#1# $0-+
2&# * &#0# 0# $-30 %0-3.1 -$ .#-.*# 5&- ,##" 20',',% ', 1203!:
230#" ,*71'1 "#4#*-.+#,2 #,%',##01 ',1.#!2-01 -,*',#
," -$$*',# 13..-02 #,%',##01 ," +',2#,,!# #,%',##01
0',',% ', 1203!230#" "#1'%, $-0 2&# ,-,"#4#*-.+#,2 #,%':
,##01 '1 ,-2 ,#!#1107 &# 1203!230#" "#1'%, "-!3+#,2
!-+.-,#,21 0# #17 2- !-+.0#&#," &# .0-(#!2 2#+ 2--)
!*11 ', 1203!230#" ,*71'1 5'2& 0#*:2'+# #62#,1'-,1 ,"
1203!230#" "#1'%, 2 2&# 1202 -$ 2&# .0-(#!2 "30',% 2&# ',4#1:
2'%2'-, .&1# 2 5-3*" &4# ##, &#*.$3* 2- &4# &" 2&#
20',',% ," 1-+# #6.#0'#,!# 5'2& 2&# +#2&-" #$-0# 2&#
1202 -$ 2&# .0-(#!2 &# 1203!230#" ,*71'1 20',',% $-0 2&#
,-,"#4#*-.+#,2 #,%',##01 51 "#4#*-.#" 7 2&# .0-(#!2
*#" "30',% 2&# 1203!230#" ,*71'1 .&1# #$-0# ',1.#!2'-,
-$ 2&# ',2#0,* 1.#!'$'!2'-,
3%312
#5*#22:!)0" -30,*
2.3.2;4
FIOM_complete_IO
<bad_status>
logical_IO_reply
logical_IO_reply
handle_
disconnect
finish_write
.4
.9
.7
device_TC_reply
logical_IO_info
logical_IO_info
logical_IO_info
device_preempt_
write_reply
FIOM_device_IO_reply
classify_
logical_
reply
abort_notify
device_write_reply
finish_TC
QIO_done
disconnect_notification
logical_IO_reply
read_data
TIO_CB
.8
FIOM_logical_reply
logical_IO_info
FIOM_
logical_
s1
completion_
controls
s2
FIOM_
logical_
cmpl_
SEM
logical_IO_reply
unused_buffer
FIOM_
logical_
cmpl_
PAT
logical_IO_info
logical_IO_info
logical_IO_reply
finish_read
do_abort
finish_QIO
.3
.10
.5
device_read_reply
abort_notify
logical_IO_reply
QIO_done
read_data
Data Flow
Control Flow
Fig. 3. * #&- ($
*(+*+( %#/) ) ) * +) & *&&#) *& '(&+ )*(+*+(
)/)*$ +%* &%# )' * &% )*(+*+( )' * &% )
) ( *& ( % +%()*% *% * #)) # *.*+# +%1
* &%# )' * &% +) * ) (' # % &%* %) $%/
)$## )' * &%) )/)*$ ) (&"% %*& )$## +%(1
)*%# ' ) *&&#) & )*(+*+( %#/) ) % *&( 0 %*& , +%* &%) () % '(&!* +) %
.*%) &% & )*(+*+( %#/) ) &( (#1* $ )/)*$) %
)*(+*+( %#/) ) '(&))) ( %'%%*#/ *1*( 1
( % % % *#/ )* '(&)) - ## *(%)&($ * *
-% * * ) '()%* #1* $ .*%) &%) * +)
& &%*(&# %&($* &% ##&- * )/)*$ *& *" &*( *&()
&( &% * &%) %*& &%) (* &% &( %# % &( )# %
'(&))
Function
Tool
Partition the Requirements
Describe Logic and Policy
Show the Flow of Control
Describe Control Processing
Track and Evaluate Interfaces
Data Flow Diagrams
Process Specifications
Control Flow Diagrams†
Control Specifications†
Data Dictionary
* #&- ($) )&- * $!&( &$'&) * &% &
+%* &% % * %*() $&% * ' ) / )&- *
#&- & * %&* &%*(&# * ) * )/)*$ (&$ * * '& %*
& , - (&)) )' * &%) &+$%* * %*(%#) & *
'( $ * , * #&- ($ '(&))) % ( &(&+) -/
*(&+ * +) & )*(+*+( %# ) ) &% *#) &(
) &% *() / )( * (+#) & * *(%)&($* &%
% * '&# / %&* * $'#$%** &% &%*(&#
† Real-time extensions
++)* -#**1"( &+(%#
#&- ($) )( * )$ (*( )* ) % (#* &%1
) ') ) * #&- ($) .'* ** */ # - * &%1
*(&## % * )/)*$ / )&- * #&- & &%*(&# % *
)/)*$ &%*(&# )' * &% &%,(*) %'+* &%*(&# ) %#)
%*& &+*'+* &%*(&# ) %#) &( %*& '(&)) &%*(&#) * )
*-& (&#) &% *& )&- &- &%*(&# ) '(&)) % *
&*( *& )&- &- '(&))) ( &%*(&## * ,* &(
* ,* * * &%(/ ) % &(( # )* & *
% &%*(&# #&- %$) % * % &%*(&# )*&( %$)
% * ( % * &%) * #&- ($) % &%*(&# #& ($) % &$ % *&*( %*& &% ($
) % ##+)*(* * &$'&%%*) & )*(+*+( %#/1
) ) - * (#1* $ .*%) &%) ) &$ %* &% *
#&- ($ % &%*(&# #&- ($ )&# ((&-) (
* #&-) * (&"% ((&-) ( &%*(&# #&-) * )&# ,(* # () ( )** $*( .) % * (#) ( '(&)))
finish_read '(&)) *(%)&($) * device_read_reply % 1
*&( ** ( * ) (/ % * read_data +( & *
%'+* / * +)( * #&-) %*& * logical_IO_reply * #&+) % %&($* &% (&$ logical_IO_info ( +( #&-)
&+* unused_buffer * #&- * * &%(/ %*( ) &(
* * #&-) ( ††
device_read_reply (data flow) = *read reply from device layer to
*logical layer. Contains read status,
*length, and data pointer.
*
*
*
status
+ length
+ data_pointer
†† Here the asterisks indicate comments, the square brackets indicate a choice of one of the
enclosed items, the vertical bar means OR, and the plus sign means AND. TC means terminal
control, QIO is quiesce I/O (flush outstanding input/output and wait for completion), RID
means request identification number, and TIO is terminal I/O.
FIOM_device_IO_reply (data flow) = [ device_read_reply
| device_write_reply
| device_TC_reply
| device_preempt_write_reply
]
NAME:
2.3.2.3;3
TITLE:
finish_read
INPUT/OUTPUT:
read_data : data_in
device_read_reply : data_in
unused_buffer : data_out
logical_IO_info : data_inout
logical_IO_reply : data_out
FIOM_logical_reply (control flow) = [ logical_read_reply
| logical_write_reply
| logical_TC_reply
| logical_QIO_reply
| logical_disconnect
| logical_abort
]
logical_IO_info (data flow) =
BODY:
transfer data (if any) to destination, doing backspace processing and freeing
unused buffers during the transfer;
send logical_IO_reply with status from device_read_reply or read_data msg;
FIOM_IO_pending
+ FIOM_IO_wait_port
+ DIOM_IO_pending
+ logical_RID_pending
+ logical_abort_RID_pending
Fig. 4. *(++ +)"","(' (* )*(++ finish_read
&,*"0 " (' ' + ,!, ,! finish_read )*(++ "+ ,"2
., /!' ,! FIOM_logical_reply "+ logical_read_reply ' ,!
+,, "+ read_pending &),1 (0+ "'", **(* ('","('+
logical_io_reply (data flow) = [ logical_read_reply
| logical_QIO_reply
| logical_TC_reply
]
read_data (data flow) = buffer_ID
+ read_status
! )*(++ +)"","(' (* finish_read " +*"+
!(/ , "+ ,*'+(*& (',*(% "'(*&,"(' "+ %",,% ,*"$2
"* ,( -'*+,' (* 0&)% ,! FIOM_device_IO_reply "+
,*'+(*& "',( (',*(% %(/ FIOM_logical_reply 1 ,!
classify_logical_reply )*(++ +!(/' "' " ! (',*(% %(/
',*+ ,! +,, .', &,*"0 FIOM_logical_cmpl_SEM ! +,,
.', &,*"0 !+ &&(*1 ,!, "+ ", *&&*+ ,! +,, (
,! +, &' * *(& ,! FIOM_logical_cmpl_SEM .',
-*"' ,! "'.+," ,"(' )!+ ,! ,& ('+"* ".
"*', *!",,-*+ ! "'% *!",,-* "+ *"' .*2
+"(' ( (' ( ,!& , ,! +,*, ( ,! .%()&', )!+
/ ' ,( +,*, ,! +)"","(' ( ,! +1+,& "' ,!
*!",,-* ,*&"' ,! !' + ,!, /* ' "' ,!
+-))(*, &(-%+ ' ()*,"' +1+,& ' -), ,!
"'.+," ,"(' *)(*, ,*&"'"' ,! !' + / '
*(& ,! " ()*,"' +1+,& % ' ,! )*(#, ,!,
!'% ,! *".* ('" -*,"(' &(-%+ /(-% !. &
&(* +'+ "' ,! +" ' )!+ ' '(, ,! +)"","('
)!+ -, ", (-% '(, /", -',"% ,!'
2.3.2-s1;4
FIOM_logical_cmpl_SEM
event
state
FIOM_logical_reply =
“logical_read_reply”
FIOM_logical_reply =
“logical_write_reply”
FIOM_logical_reply =
“logical_TC_reply”
FIOM_logical_reply =
“logical_QIO_reply”
FIOM_logical_reply =
“logical_disconnect”
FIOM_logical_reply =
“logical_abort”
closed
open_pending
idle
read_pending
finish_read/
idle
finish_write/
idle
do_disconnect/
close_pending
do_abort/
idle
finish_write/
idle
do_disconnect/
close_pending
do_abort/
idle
do_disconnect/
close_pending
do_abort/
idle
do_disconnect/
close_pending
do_abort/
idle
finish_QIO/
idle
QIO_pending
TC_pending
finish_TC/
idle
close_pending
close_timer_running
Note: If an entry is blank, it is an “impossible” condition which should not be encountered due to subqueue restraints, etc.
If the condition is hit, error code (not shown) will take appropriate action.
Fig. 5. ,, .', &,*"0
- -+, /%,,2$* (-*'%
TermDSM
NDM
timers
NDM_reply
NDM_req
reset_req
NDM_
powerfail_
event
timer_req
timer_event_msg
WSCM
WSC_reply
file_system
SM_reply
WSC_req
SM_req
IEEE_9823_
packet
Redesigned
Driver
got_msg
ports
LAN_Driver
IEEE_9822_
packet
reset_req
HLIO_reply
HLIO
HLIO_req
start_
dev_
rec
BMGR_reply
BMGR_req
BMGR_
reply_
msg
disconnect
signal_
notify_
event
DTSM
console_
msg
OS_calls
BMGR
" 01/1"! 01/2 12/"! +)60&0 20&+$ 1%" #/$*"+11&,+ 1" %8
+&.2" %&0 1" %+&.2" 0")" 10 0"1 ,# &+-210 +! ,21-210 +!
/"1"0 #/$*"+1 *,!") ,# -/, "00"0 1%1 1/+0#,/* 1%1 0"1
,# !1 %" ,*-,0&1" *,!") &0 /"1"! 6 $/,2-&+$ 1%"
#/$*"+10 " 1/&"! 1, (""- 1%" 0601"* 0-" &#& 1&,+ 0"-/1"
#/,* 1%" / %&1" 12/" " /,(" 1%" 0601"* &+1, -/10 0"!
,+ 1%" 16-" ,# ,/ "5*-)" ,+" #/$*"+1 *,!")"! 1%"
/"! -1% 1 0-" &#&"! 4%1 %--"+"! 4&1% /"! /".2"010
1%1 4"/" -/, "00"! ,*-)"1")6 4&1%,21 ), (&+$ #,/ /"8
0,2/ " /"! /".2"010 1%1 ), ("! #,/ /"0,2/ " 02 % 0 !1 ,** 2##"/ +! /"! /".2"010 1%1 ,2)! +,1 " -/,8
"00"! " 20" ,# ) ( ,# /"0,2/ " 21 ,2)! +,1 ), (
+,84&1 /"! %" )01 16-" ,# /"! /".2"01 ,2)! +,1 "
-/, "00"! &+ -/, "!2/" )) "+3&/,+*"+1 21 +""!"! 1, "
%+!)"! &+ *"00$"80"! "+3&/,+*"+1 !"#"//"! *+$"/ 0, 1%1 1%" 20"/ -/, "00 ,2)! ,+1&+2" /2++&+$
"3"+ 1%,2$% 1%" /"! /".2"01 %! +,1 ""+ ,*-)"1")6
-/, "00"!
1 " *" &+ /"0&+$)6 )"/ 4%"+ 4" 1/&"! 1, 1&" 1%" 01/2 8
12/"! +)60&0 #/$*"+10 1,$"1%"/ 1%1 +,1 1(&+$ 1%" / %&8
1" 12/" &+1, ,+0&!"/1&,+ 40 -/,)"* %" $,) ,# 1%"
/"!"0&$+ 40 1, &*-/,3" 1%" -"/#,/*+ " 4%&)" *&+1&+&+$
1%" 0*" )"3") ,# #2+ 1&,+)&16 " %! -12/"! 1%" #2+ 8
1&,+)&16 ,# 1%" !/&3"/ &+ ,2/ #/$*"+10 0"! ,+ 16-" ,# ,4"3"/ " % #/$*"+1 ,+1&+"! #01 -1%0 #01 &+ 1"/*0
,# +2*"/ ,# &+01/2 1&,+091%" #01 -1% ,2)! ), ( ,+ /"0,2/ " +! 0),4"/ -1%0 /".2&/"! 1%" *"00$"80"!
&+1"/# " 4%& % &0 *2 % 0),4"/ 1%+ -/, "!2/" )) &+1"/8
# " 1 40 !&##& 2)1 1, #&$2/" ,21 %,4 1, ,*&+" )) 1%"
#01 -1%0 4%& % 4"/" 0-/"! ,21 /,00 *+6 #/$*"+10
%&0 &0 4%"/" ,+" *',/ !&##& 2)16 4&1% 01/2 12/"! +)60&0
/,0"9%,4 1, /")1" 1%" #2+ 1&,+) 0-" &#& 1&,+ 1, 1%" / %&8
1" 12/" %" / %&1" 12/" %! ""+ 0")" 1"! 0 1%" "01 46
1, %&"3" 1%" -"/#,/*+ " $,)0 " #")1 1%1 1, /"1" 1%"
0-" &#& 1&,+ 4&1%,21 ,+0&!"/1&,+ ,# 1%" / %&1" 12/" 4,2)!
*(" 1%" !"0&$+ -%0" *,/" !&##& 2)1 " 01,--"! 01/2 12/"!
+)60&0 4,/( #,/ 4%&)" +! ,+ "+1/1"! ,+ ,*-)"1&+$
1%" / %&1" 12/" 1)"6 +! &/%& %")-"! 20 /"0,)3" 1%"
/ %&1" 12/"83"/02080-" &#& 1&,+ !&)"**
2$201 "4)"118 (/! ,2/+)
Fig. 6. ,+1"51 !&$/*
&"4&+$ 1%" 0601"* #/,* 1%" !1 -,&+1 ,# 3&"4 //&"! ,3"/
&+1, ,2/ -/))") / %&1" 12/" !&0 200&,+0 1 ,+" -,&+1 4"
-%60& ))6 0&*2)1"! !1 #),4&+$ 1%/,2$% 1%" !/&3"/ 20&+$
-"+0 +! "/0"/0 0 !1 +! -",-)" 0 *,!2)"0 %&0 %")-"!
20 3&02)&7" 1%" &+1"/# " ,-"/1&,+ +! -/,)"*0 1%1 /&0"
#/,* *&5"! -/, "!2/) +! *"00$"80"! "+3&/,+*"+1
,/ ,*-)"5 /"0 4" 20"! "5&01&+$ ,!" 4%"/"3"/ -,00&)"
1, !"/&3" !" &0&,+ 1/""0 +! 011" 1/+0&1&,+ !&$/*0 0 4"
" *" *,/" ,*#,/1)" 4&1% 01/2 12/"! +)60&0 4" 4"/"
)" 1, 00&$+ 4,/( 1, " % *"*"/ 1"/&) 40 /"3&"4"!
+! !&0 200"! 1 -/,'" 1 *""1&+$0
+" 0-" 1 ,# 01/2 12/"! +)60&0 &0 1%" &1"/1&3" +12/" ,#
1%" *"1%,! +" *("0 #&/01 -00 1 1%" !1 #),4 !&$/*
+! 1%"+ !&0 /!0 ,/ /"3&0"0 &1 2+1&) 01&0#&"! + " 4" #")1
01&0#&"! 4&1% ,2/ / %&1" 12/" 4" 0"1 0&!" ,2/ ,)! 01/2 8
12/"! +)60&0 4,/( +! 01/1"! $&+ %&0 1&*" ,2/ -8
-/, % 40 1, 20" 01/2 12/"! +)60&0 1, 0-" &#6 1%" 0601"*
$&3"+ 1%" / %&1" 12/" &+01"! ,# 0-" &#6&+$ 1%" 0601"* &+!"8
-"+!"+1 ,# 1%" / %&1" 12/" " #")1 1%&0 40 +" "00/6 1,
*""1 ,2/ -"/#,/*+ " $,)0 +! 1, %")- )/&#6 1%" &+1"/# "0
%"/" "#,/" 4" 0"! 1%" 0-" &#& 1&,+ ,+ 1%" 16-" ,# 1%&0 1&*" 4" 0"! 1%" 0-" &#& 1&,+ ,+ #01 )" 1, ,*8
-)"1" 4&1%&+ 1%" !/&3"/ !"#"//"! +""!0 ,-"/1&+$ 0601"*
%")- 1, ,*-)"1" ,/ &+,2+! -1%0 0&+$ 1%" !1 &+1"/8
3&"4&+$ 1" %+&.2" 4" 01/1"! 4&1% 1%" ,+1"51 !&$/* &$
+! 1%" )"3") +! !&$/*0 &$0 +! %" )"3") !&$/* %0 1%/"" -/, "00"0 DIOM FIOM +! IIOM 4%& %
*(" 2- 1%" /"!"0&$+"! !/&3"/ %" )"3") !&$/*0 ,#
4%& % &$ &0 + "5*-)" %3" -/, "00 #,/ " % )6"/ ,#
1%" / %&1" 12/" +! 0,*" $"+"/) 21&)&16 -/, "00"0 #1"/
1%"0" !&$/*0 4"/" !,+" 4" /,(" 1%" 4,/( 2- 6 -/,8
"00 " 4"/" )" 1, 20" *+6 ,# 1%" !&$/*0 #/,* 1%"
"/)&"/ 01/2 12/"! +)60&0 4,/(
%"+ /"3&"4&+$ !1 #),4 !&$/*0 +! -/, "00 0-" &#& 8
1&,+0 &002"0 .2"01&,+0 +! -/,)"*0 4"/" "06 1, !"1" 1
%"6 1"+!"! 1, 01+! ,21 ,+ 1%" !&$/*0 1 40 "06 1, 0""
&# !1 40 *&00&+$ ,/ 4/,+$ ,/ %!+1 ""+ &+&1&)&7"! ,/
"5*-)" &+ 1%" finish_read -/, "00 0-" &#& 1&,+ &$ timer_req
HLIO_req
NDM_req
HLIO_reply
timer_
event_
msg
NDM_
reply
IEEE_8023_
packet
BMGR_
reply_
msg
reset_req
WSC_req
BMGR_reply
BMGR_req
WSC_reply
got_msg
DIOM
1
open_
status
read_data
flow_
control_
event
powerfail_
event
deferred_
AFCP_
packet
QIO_done
IDY_done
console_msg
s2_available
timer_req
available_
buffer
deferred_
IO_req
BMGR_req
BMGR_
reply
IIOM
disconnect_notification
disconnect
s1_available
signal_notify_
event
3
s2_available
available_
buffer
start_dev_
rec
s2_available
abort_notify
timer_req
IEEE_
8023_
packet
QIO_done
IEEE_8023_
packet
SM_req
FIOM
SM_reply
NDM_rec
NDM_
powerfail_
event
disconnect_notification
2
BMGR_reply_msg
read_data
BMGR_req
deferred_AFCP_packet
BMGR_reply
WSC_reply
IEEE_8023_
WSC_req
packet
available_buffer
Fig. 7. ) -) #-# )$ *&. % + +) $!&) $&,#* + *+ $%) FIOM + )) $%) DIOM % + %1
&,% $%) IIOM
unused_buffer .* + #&. &,+ & + ')&** ,+ +
,) .*%+ ) % + )*+ )+ & + *' + &% "'+ # *+ & **,* % (,*+ &%* % + ) )*&#,+ &%* ,)1
% + *+),+,) %#0* * ')&**
$&%+ &) + /+)%# *' + &% .* , .
*+&'' *+),+,) %#0* * .&)" % &%%+)+ &% .) +1
% + /+)%# *' + &% &,$%+ , & + .*
+"% )&$ / *+ % &,$%+* * % &,) ,'') % #&.)
%+)* %+ % +&'1#-# *+),+,) %#0* *
)$* * .) ,* +& +)$ % %+)* %
+& #' % + *,''&)+ % &')+ % *0*+$
%* ++ + ) -) )(, )
) %##0 . %&+ - % %+)%# *' + &% % &,)
'#%* &.-) + %+)%# * % .* '')&') + &) +
*+),+,) * % ,+ %&+ + %#0* * % . % &1
,$%+ &) + *+),+,) %#0* * .&)" )&) . *'# +
+ * % ') & %+& +.& ') &* % % %+)%#
*' + &% &,$%+ %+)%# *' + &% &%+ %
,,*+ .#++1") &,)%#
2;32
FIOM
BMGR_ reply_ msg
get_s2_for_
buffers
.12
s2_info
TIO_CB
BMGR_reply_msg
TIO_CB
ldev_buffer_info
s2_available
s1_available
ldev_buffer_info
<printer>
SM_req
BMGR_reply
available_buffer
BMGR_req
s2_info
available_buffer
<printer>
SM_reply
<free_buf>
BMGR_req
handle_
printer_
requests
free_buffer
get_buffers
.8
.11
block_FIOM
free_s2_
and_block
deferred_IO_req
.1
logical_IO_req
printer_status_info
VFC_info
num_buffers_needed
unused_buffer
logical_IO_reply
FIOM_
logical_
level
TIO_CB
.3
<terminal>
SM_req
logical_
IO_reply
logical_
IO_req
s2_info
<terminal>
SM_reply
s2_available
didnt_get_buffers
io_started
FIOM_
device_
control
timer_req
FIOM_
device_
IO_reply
.4
FIOM_session_req
deferred_ IO_req
disconnect_
notification
QIO_
done
read_data
FIOM_
session
block_FIOM
WSC_reply
abort_notify
WSC_req
.5
handle_
terminal_
requests
transport_req
get_s2_for_
events
.7
deferred_ IO_req
buffer_IDs
blockable
FIOM_device_
IO_req
semaphore_info
semaphore_info
.10
s1_available
FIOM_
transport
.9
s2_available
abort_notify
QIO_done
.6
read_data
IEEE_ 8023_ packet
timer_req
disconnect_notification
deferred_ AFCP_ packet
Fig. 8. FIOM %/%
" +&
+" "'-+(.-"(' (.- -! ('-1- " +& ' ,+")5
-"(', ( -! "'-+, ! +,- ( -! (.&'- 0, '+5
- .,"' &0(+$ ,(-0+ -((% (+ ,-+.-.+ '%2,",
' ,-+.-.+ ," ' +(& + !'(%( ", '
- %(0 " +&, '+%%2 4% +" !- (+ 0+(' (&
+( '(.+ , ' "'+, -( -!+(0 02 " +&,
,/+% -"&, ! ., ( ,-+.-.+ '%2,", -( ,)"2 ,2,-& '-.+%%2 +",, -! *.,-"(', -!- ' -( ',0+ (.- -! )+(.-
0 ! -( ( "- %% (/+ "' 0 0(.% !/ +,(%/
-! +!"--.+5/+,.,5,-+.-.+5'%2,", )+(%& +%"+
' '(- -+" -( ( ,-+.-.+ '%2,", 0"-!(.- (',"+"'
-! +!"--.+ ( -! ,2,-& " '(- ., -! ))+(!
(.-%"' 2 -%2 ' "+!" .- 0 " ., ,(&-!"'
+%- -( "- !+ ", "' %"' -0' (',"+"' -!
. .,-
0%--5$+ (.+'%
+!"--.+ ' "'%."' ," ' "' -! ,)""-"(' 5
., -!", 0, +," ' ' )+(+&' 0, "&)(+-'-
0 ! %+2 '%23 -! (+" "'% +"/+ -( "' ())(+-.5
'"-", (+ ,!(+-'"' -! )-! %' -!, !, ())(+-.'"-",
' -( "'(+)(+- "'-( -! ," ' "'- $'(0
!(0 -( ( -!- - -! ," ' )!, " -!2 0+'- "'%.
"' -! ,)""-"(' , 0%% ,( 0 ).- -! +!"--.+ "' -! -() %/%, ( -! ,)""-"(' ,- &' + ++
&' + "'(.' &' +
,!(.% !/ ,)'- &(+ -"& $)"' -! - "-"('+2
'-+", .) -( - %% -!+(. ! -! )+(#- -! %$ ( --'5
-"(' )" -( - "'"-"(', 0, &#(+ "%"' ! -
', -( "' , -! " +&, ' )+(,, ,)""5
-"(', + +- - "-"('+2 '-+", -!- 0+ +%- -(
- ,-+.-.+, "' -! (+" "'% +"/+ 0+ ,2 (0/+ 0
" '(- %02, -2) "' -! (&)%- "'"-"(', " '((.&'- '0 - "-"('+2 '-+", +" (+(.,%2 ' -!",
FIOM_SC;3
FIOM_SC
FIOM
FIOM_main
FIOM_handle_
terminal_reqs
UT_get_s1
UT_get_s2
UT_free_
semaphores
FIOM_handle_
printer_reqs
TP_setup_t_
write_info
FIOM_route_
replies
FIOM_
logical_
level
0$' -" '-#+ - #-#('+2 0(.% "/ %,(
)%'' -#& (+ -" #'-+'% ,)# #-#(' #-, #',)-#(',
' -" +0(+$ #' -" ,".%
,#!' #, -" )+(,, ( -+', (+&#'! -" ,)# #-#(' (
0"- &.,- (' #'-( -" )%' ( "(0 #- 0#%% ('
%,,#% ,#!' )+(., '++-#/ (.&'- 0#-" ,(&
!+)"#, - ,-+-, 0#-" -" )+(.+% "+-+#,-#, ' (+4
&-#(' #, ( -' +)- -"+(.!"(.- -" ,#!' (.&'-
' -" (.&'- #, !'+%%2 '(- ,)# # '(.!" "#,
+,.%-, #' ,(& ,#!' #&)+(/#,-#(' .+#'! #&)%&'--#('
-+.-.+ ,#!' #'-+(., ,-+.-.+ ' !+)"#, #'-( -"
,#!' )+(,, -( () 0#-" -" %+!',, ( -" ,2,-& "
!(% ( ,-+.-.+ ,#!' #, "#!"%2 &#'-#'% (&)+4
"',#% ' ,#%2 -,- -()4(0' ,#!' " ,2,-& #,
)+-#-#(' #'-( (&)(''-, 0"#" #'-+- -( "#/ -"
.'-#('%#-2 ( -" ,2,-&
( +- -" ,-+.-.+ ,#!' -" - %(0 #!+& )+(4
,,, + !+(.) #'-( )+(,,, -"- % 0#-" #').-, %
0#-" (.-).-, -+', (+& #').-, #'-( (.-).-, (+ "'% -+',4
-#(', -0' #').-, ' (.-).-, (.%, + -"'
+- +(& -", !+(.), /%.-#(' ' + #'&'- -"4
'#*.,5%% (",#(' (.)%#'! ' )$!#'!5 (&4
)%- -" .#%#'! ( -" (.&'-, " ,-+.-.+ "+-
,#!' #-#('+2 ' &(.% ,)# #-#(', + -" (.4
&'-, )+(. -"+(.!" -"#, )+(,, ,-+.-.+ "+,"(0, -" ,# (&)(''-, &(.%, ' -"#+ #'-+ ,
#' -()4(0' !+)"#% &''+ " ,#!' #-#('+2 4
#', -" #'-+ , - .,, ,#&#%+ %'!.! -( -" - #4
-#('+2 ( ,-+.-.+ '%2,#, " &(.% ,)# #-#(',
#' -" )+(.+% )+- ( -" ,#!' ' -" ,*.' (
#'-+-#(', " &(.% ,)# #-#(' ,+#, 0"- )+( -" ,)# #-#(' #, #'! ,-#, # 0"- -" &(.% ',
-( (&&.'#- ' "(0 #- )+ (+&, -" .'-#(' &(4
.% ,)# #-#(' #, 0+#--' #' ,-+.-.+ '!%#," , #4
,#(' -+ (+ -% (+ , ,-- -+',#-#(' #!+&
FIOM_start_
printer_
requests
TP_setup_p_w
rite_info
TP_printer_
status
Fig. 9. FIOM ,-+.-.+ "+-
#! ,"(0, -" #+,- ,-+.-.+ "+- (+ -" ,- &'!+
"+ + &#' &(.% ,(& .-#%#-2 &(.%, !
UT_get_s1 ' /#4,)# # &(.%, ! FIOM_handle_
terminal_reqs 0"#" /'-.%%2 % -( -" FIOM_logical_level
module #! #, -" &(.% ,)# #-#(' (+ -" ,- &'!+ &(.% FIOM - ,"(0, -" ,*.' #' 0"#" -"
(-"+ &(.%, + %% ,#!' #-#('+2 '-+#, %(($ ,#&4
#%+ -( - #-#('+2 '-+#,
' 0 " #'#," -" #'-+'% ,)# #-#(' #- 0, .'4
%+ "(0 -( +#/ -" ,-+.-.+ ,#!' +(& #- #
(' -" (%%(0#'! ))+(" " ,-+.-.+ '%2,#, )+(,,
0, -.+' #'-( &(.% "#++"#% ,-+.-.+ 0, 4
/%() (+ " %/% 2 3)+(&(-#'! (,, (+ 3"#+#'! (,, &(.% 0"' ',,+2 (&)+#'! -" ,- &'4
!+ - %(0 #!+& #! 0#-" -" ,- &'!+
,-+.-.+ "+- #! (' ' , -"- -" FIOM_main &(4
.% #, 3"#+ , (,, +- -( "'% ,&)"(+, '
-( %% -" FIOM_handle_terminal_reqs ' FIOM_handle_printer_reqs
&(.%,†
"' -" +(.!" + -, ( -" ,-+.-.+ "+-, 0+ +2
-"2 0+ '-+ #'-( -" &0(+$ -((% " -& -"'
-+&#' 0"- " &(.% (, ' $'(0, " '1,-) 0, -( 0%$ -"+(.!" -" ,#!' ' ,.+ #- 0(+$,
"#, #'/(%/ -+#'! " -"+(.!" -" ,#!' -( ,.+
† Note: Some of the process names are capitalized or spelled differently in Figs. 8, 9, 10, and 11
and in the text of this paper. Some names did change between the structured analysis document and the structured design document. In the module specification, Fig. 10, the engineer
chose to capitalize the function codes, request types, and procedures called. In Fig. 11, the
names are capitalized because the coding convention that was followed capitalized procedure
calls. The MPE/iX operating system is case insensitive, so the differences are insignificant.
.!.,-
0%--4$+ (.+'%
NAME:
FIOM_main;2
TITLE:
FIOM_main
PARAMETERS:
SM_CB
SM_arg_list
return_status
LOCALS:
request
status
GLOBALS:
BODY:
*****************************************************************************
Calling parms:
SM_CB
–– pointer to SM control block
SM_arg_list –– pointer to storage manager arguments
*****************************************************************************
TIO_CB := SM_CB^.fwrt_cb; * used to be fast write control block *
case SM_arg_list^.sm_generic_parms.func_code of
SM_READ_FN:
request := READ_REQ;
SM_WRITE_FN:
request := WRITE_REQ;
SM_CONTROL_FN:
if (SM_arg_list^.sm_control_parms_t.* terminal control * <> TC_QUIESCE_IO)
request := TC_REQ;
else
request := QIO_REQ;
SM_DEVCONTROL_FN:
request := TC_REQ;
end;
* since this is the FIOM, and FIOM only handles waited I/O, always block
* if necessary to get semaphores.
*
*
status := UT_GET_S1 (FIOM, TRUE);
if (status <> TRUE)
* error, log and exit *;
status := UT_GET_S2 (FIOM, TRUE);
if (status <> TRUE)
* error, log and exit *;
if (TIO_CB^.device_type = * terminal *)
status := FIOM_HANDLE_TERMINAL_REQS (request, SM_arg_list);
else
status := FIOM_HANDLE_PRINTER_REQS (request, SM_arg_list);
return_status := MAP_TO_OS_STATUS (status);
UT_FREE_SEMAPHORES;
Fig. 10. FIOM "$)! '%($#
(( ( &( #$&"($# +' *!! ($ ( "$)!' #
(( ( "$)!' +& $# ( &( (#' )&# (
#(& %&$'' "$)!' +& $!!%' +# ( +' &'$#! #$( $ ") *!)($# $ ( #(&' (
$)%!# $& $'$# )' $ ! $ (" #(&#!
'# $)"#( $#(# $#!, "+$& '(&)()& &('
# "$)! '%($#'
(& ( #(&#! '# +' #'%( # ( &+$& $"%!( + +$& $# ## ( %&$)& !&($#'
( '(&)()&' '$(+& $#)&($# ! '(&)()& #
$# '(#&' "$)! '%($#' +& ( ''
$& ( '! %&$)&' $# +' "#!, "((& $
$#*&(# %')$$ ($ '! ' ( $)(& !$
$ ( '( "#& "$)! $"%&# (' ($ ( '(
"#& "$)! '%($# $# # ' $+
!$'!, &!( (, & $ ' "$& (! ($ (
"$)! '%($# &"+$& !'$ !!)'(&(' %&$!" + +( "$)! '%($#' "#, $ ("
))'( +!((- & $)&#!
1664
1664
1664
1664
1664
1664
1664
1664
691.000
691.000
691.000
691.000
691.000
691.000
691.000
691.000
2 begin { tio_fiom }
2
2 try
2 begin { Try section }
2
2 tio_cb := tio_cb_ptr_type( fiom_cb_ptr );
2
2 l_index := 0;
1664
1664
1664
1664
1664
1665
1666
1667
1667
1668
1668
1668
1668
1669
1669
1669
1669
1669
1670
1671
1672
1673
1674
1675
1676
1676
1677
1677
1677
1677
1677
1677
1677
1677
1678
1678
1679
1680
1681
1682
1683
1684
1684
1685
1685
1685
1685
1685
1685
1685
1686
1686
1687
1687
1687
1687
1687
1687
1687
1687
1688
1688
1688
1688
1689
1690
1691
1692
1693
1694
1694
1695
1695
1695
1695
1695
1695
1695
1695
1695
691.000
691.000
691.000
692.000
693.000
694.000
695.000
696.000
697.000
698.000
699.000
700.000
701.000
702.000
703.000
704.000
705.000
706.000
707.000
708.000
709.000
710.000
711.000
712.000
713.000
714.000
715.000
716.000
717.000
718.000
719.000
720.000
721.000
722.000
723.000
724.000
725.000
726.000
727.000
728.000
729.000
730.000
731.000
732.000
733.000
734.000
735.000
736.000
737.000
738.000
739.000
740.000
741.000
742.000
743.000
744.000
745.000
746.000
747.000
748.000
749.000
750.000
751.000
752.000
753.000
754.000
755.000
756.000
757.000
758.000
759.000
760.000
761.000
762.000
763.000
764.000
765.000
766.000
767.000
768.000
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
1
1
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
1
0
{––––––––––––––––––––––––––––––––––––––––––––––––– }
{ The FIOM only handles blocked IO, always block
}
{ if necessary to obtain semaphores
}
{––––––––––––––––––––––––––––––––––––––––––––––––– }
if ( CUT_GET_S1 (tio_cb, Fiom) ) then
if ( CUT_GET_S2 (tio_cb, Fiom) ) then
if ( not (tio_cb^.device_type.printer) ) then
{ terminal }
status := FIOM_HANDLE_TERMINAL_REQUESTS
( sm_arg_list_ptr_t(arg_list))
else
{ printer }
status := FIOM_HANDLE_PRINTER_REQUESTS
( psm_parm_ptr_t(arg_list))
else
begin
{**** LOG S2 error ****}
status := Bad_status;
l_tio_status.int_status.status_code := Internal_err;
l_tio_status.int_status.layer := Main_layer;
l_tio_status.int_status.proc_number := Pn_tio_fiom;
l_tio_status.int_status.location := 0;
l_tio_status.int_status.llio_flag := False;
l_tio_status.ext_status_hpe := status;
CUT_LOGMSG ( tio_cb,
l_tio_status,
Main_layer,
Fiom
);
end
else
begin
status := Bad_status;
{**** LOG S1 error ****}
l_tio_status.int_status.status_code := Internal_err;
l_tio_status.int_status.layer := Main_layer;
l_tio_status.int_status.proc_number := Pn_tio_fiom;
l_tio_status.int_status.location := 1;
l_tio_status.int_status.llio_flag := False;
l_tio_status.ext_status_hpe := status;
CUT_LOGMSG ( tio_cb,
l_tio_status,
Main_layer,
Fiom
);
end;
CUT_FREE_S2 (tio_cb);
CUT_FREE_S1 (tio_cb);
end; { Try section }
recover
begin { Recover section }
case ESCAPECODE of
0:;
otherwise
begin
l_tio_status.int_status.status_code := External_err;
l_tio_status.int_status.layer := Main_layer;
l_tio_status.int_status.proc_number := Pn_tio_fiom;
l_tio_status.int_status.location := 2;
l_tio_status.int_status.llio_flag := False;
l_tio_status.ext_status_hpe := hpe_status(ESCAPECODE);
CUT_LOGMSG ( tio_cb,
l_tio_status,
Main_layer,
Fiom
);
end;
end;
end; { Recover section }
end; { tio_fiom }
Fig. 11. FIOM $
:(5( 722 &2'(>/,.( +( &$6( 67$7(0(17 ,6 $1 811(&(66$5<
/(9(/ 2) '(7$,/ $1' ,6 $&78$//< 127 &$55,(' 7+528*+ ,172 7+(
&2'( 6,1&( 7+( arg_list ,6 3$66(' 72 7+( HANDLE 352&('85(6
1$/<6,6 2) 7+( &2'( 6+2:6 $ 5('8&7,21 ,1 &2'( 6,=(
&203$5(' 72 7+( 25,*,1$/ '5,9(5 +( 5('8&7,21 &20(6 )520
7+( 5(86( 2) 352&('85(6 $6 $ 5(68/7 2) 6758&785(' '(6,*1 $1'
)520 $ 6758&785( 7+$7 $//2:6 &20021 5287,1(6 72 %( 6+$5('
%(7:((1 7+( DIOM FIOM $1' IIOM 02'8/(6 ,167($' 2) 5(48,5>
,1* 21( &23< 3(5 02'8/( 1 7+( 25,*,1$/ '5,9(5 7+(5( :$6 $
/2*,&$/ '(9,&( 0$1$*(5 )25 7(50,1$/6 $1' 21( )25 6(5,$/ 35,17>
(56 1 7+( 5('(6,*1(' '5,9(5 7+( )$67 0$1$*(5 $1' '()>
(55(' 0$1$*(5 $5( $%/( 72 +$1'/( %27+ 7(50,1$/6 $1'
6(5,$/ 35,17(56
1 *(1(5$/ 127 (128*+ $77(17,21 :$6 3$,' 72 '(),1,1* '(6,*1
',&7,21$5< (175,(6 25 '$7$ 6758&785(6 758&785(' '(6,*1 $''('
7+( 1(;7 /(9(/ 2) '(7$,/ 72 7+( '(6,*1 )520 7+( 63(&,),&$7,21
7 :$6 ($6< 72 '(9(/23 7+( '(6,*1 )520 7+( 63(&,),&$7,21
21&( :( +$' 285 $3352$&+ !( 2&&$6,21$//< &5($7(' 02'8/(
63(&,),&$7,216 7+$7 $5( 722 08&+ /,.( &2'( 2'8/( 63(&,),&$>
7,216 $5( 127 0($17 72 +$1'/( 7+( 60$// '(7$,/6 7+$7 $5( %(67
68,7(' 72 &2',1* %87 72 '(),1( +2: 7+( )81&7,21 ,6 3(5>
)250(' ) 722 08&+ $77(17,21 ,6 3$,' 72 &2'(>/,.( '(7$,/6 /(66
,6 3$,' 72 +2: 7+( 63(&,),&$7,21 ,6 72 %( ,03/(0(17('
) :( +$' 72 '2 ,7 $// 29(5 $*$,1 :( :28/' +$9( 3$,' 025(
$77(17,21 72 7+( ,17(5)$&(6 $1' %(77(5 '(),1(' 7+( '$7$ 3$66>
,1* %(7:((1 02'8/(6 ,1&( :( :(5( 86,1* $ /27 2) (;,67,1*
,17(5)$&(6 :( ',' 127 387 7+( 7,0( ,172 7+( '$7$ 25 '(6,*1
',&7,21$5,(6 +,6 0($17 7+$7 7+( '$7$ (/(0(176 :(5( 3225/<
'(),1(' 6,1&( :( 7(1'(' 72 $6680( 7+$7 (9(5<21( .1(:
+2: 7+( '$7$ :$6 '(),1(' !( :28/' $/62 +$9( '(9(/23(' $
02'8/( 63(&,),&$7,21 67$1'$5' 72 &5($7( &216,67(1&< $1'
$92,' 9$5,$7,216 ,1 7+( '(*5(( 2) &2'(>/,.( 1*/,6+ ,1 7+(
,17(51$/ '(6,*1
+( ,17(51$/ 63(&,),&$7,21 5(48,5(' 620( %$6,& 6758&785('
$1$/<6,6 75$,1,1* )25 7+( ,163(&7,216 +,6 :$6 %(&$86( 2) 7+(
*5$3+,&$/ 1$785( 2) 7+( ',$*5$06 $1' 7+( '(&,6,21 6758&785(6
+( ,17(51$/ '(6,*1 6758&785(' '(6,*1 '2&80(17 :$6 ($6,(5
72 81'(567$1' 6,1&( ,7 &216,67(' 2) 6758&785( &+$576 36(8'2>
&2'( $1' '$7$ '(6&5,37,216 163(&7,216 :(5( '21( %< $
'(37+ :$/. 7+528*+ 7+( 352&(66(6 $1' +(1&( &21&(175$7('
21 $5&+,7(&785$/ /(9(/6 $6 23326(' 72 ,17(5)$&(6 %(7:((1
/(9(/6 +( ,163(&7,216 ',' $1 (;&(//(17 -2% 2) &+(&.,1* )25
)81&7,21$/,7< $1' '(6,*1 )/$:6 %87 :(5( :($. ,1 7+( $5($ 2)
,17(5)$&( &+(&.,1*
+( 25,*,1$/ '5,9(5 ,17(51$/ '(6,*1 '2&80(176 :(5( 1$55$7,9(
:,7+ 620( 67$7( 75$16,7,21 ',$*5$06 +(< :(5( 08&+ 6+257(5
7+$1 7+( ,17(51$/ 63(&,),&$7,21 $1' ,17(51$/ '(6,*1 &5($7('
:,7+ 6758&785(' 0(7+2'6 $67 5(9,(:6 2) 352-(&7 '2&80(17$>
7,21 (;7(51$/ 63(&,),&$7,21 ,17(51$/ 63(&,),&$7,21 ,17(51$/
'(6,*1 722. 3/$&( $7 21( >72> >+285 0((7,1* 3(5 '2&8>
0(17 ,1&( 7+( 6758&785(' '2&80(176 :(5( /$5*(5 $1' &21>
7$,1(' 025( '(7$,/ ,7 722. $%287 (1*,1((5>+2856 72 ,1>
63(&7 25 5(9,(: 7+(0 +( 3$57,&,3$176 )(/7 7+$7 7+( 5(9,(:6
2) 7+( ,17(51$/ 63(&,),&$7,21 $1' ,17(51$/ '(6,*1 6758&785('
$1$/<6,6 $1' 6758&785(' '(6,*1 '2&80(176 :(5( 9(5< 9$/8>
$%/( +( 0$7(5,$/ :$6 08&+ ($6,(5 72 ,163(&7 )25 &203/(7(>
1(66 &255(&71(66 $1' )81&7,21$/,7< 7+$1 7+( 1$55$7,9( ,17(5>
1$/ 63(&,),&$7,21 $1' ,17(51$/ '(6,*1 '2&80(176
+(5( ,6 $ &21&(51 7+$7 86,1* 6758&785(' $1$/<6,6 $1' 6758&>
785(' '(6,*1 +$6 $ /$5*( ,03$&7 21 7+( 6&+('8/( +( 1(*$>
7,9( ,03$&7 2) 6758&785(' $1$/<6,6 $1' 6758&785(' '(6,*1 21
285 6&+('8/( &216,67(' 2) 75$,1,1* 7,0( 7:2 :((.6 7,0(
63(17 %(&20,1* )$0,/,$5 :,7+ 6758&785(' $1$/<6,6 21( 0217+
2) ,17(50,77(17 6758&785(' $1$/<6,6 $1' /21*(5 ,163(&7,216 326,7,9( 5(68/7 2) 86,1* 6758&785(' $1$/<6,6 $1' 6758&785('
'(6,*1 ,6 7+$7 ($&+ 67(3 ,6 $ 352*5(66,21 )520 7+( /$67 $&+
'2&80(17 ,6 %8,/7 21 7+( 35(9,286 '2&80(17 81/,.( 7+( &/$6>
6,&$/ '(6,*1 ,1 :+,&+ ($&+ '2&80(17 ,6 127 62 &/26(/< 7,(' 72
($5/,(5 21(6 +( ())257 5(48,5(' $7 ($&+ 3+$6( :$6 /(66 7+$1
7+( 21( %()25( $1' :$6 0$,1/< ',5(&7(' $7 $'',1* 025(
'(7$,/6 +( 326,7,9( ,03$&7 2) 6758&785(' $1$/<6,6 $1' 6758&>
785(' '(6,*1 21 7+( 6&+('8/( :$6 6+257(5 7(67 &<&/(6 215(>
*5(66,21 7(676 :(5( 3$66(' $+($' 2) 6&+('8/(
+( 5('(6,*1 352-(&7 ,03529(' %/2&. 02'( 3(5)250$1&( $1'
$&+,(9(' $ *5($7(5 7+$1 5('8&7,21 ,1 7+( 7(50,1$/ '5,9(5
3$7+ /(1*7+ +( &2'( 3$66(' $// )81&7,21$/ 7(676 ,1&/8',1*
>+285 $1' >+285 1215(*5(66,21 7(676 2) 7+( 7(67,1*
(55256 :(5( &2',1* (55256 +( 0$-25,7< 2) 7+( 5(0$,1,1*
'()(&76 :(5( )281' ,1 $5($6 7+$7 :(5( .12:1 72 %( :($.
)520 7+( '(6,*1 $1' ,163(&7,21 3+$6(6 +( (1*,1((56 9$/>
8(' /($51,1* 6758&785(' 0(7+2'6 $1' 722/6 %27+ )25 7+( 48$/>
,7< $1' &203/(7(1(66 2) 7+( '(6,*1 $1' 7+( $&48,5(' 6.,// 6(7
+( 352-(&7 7($0 %(/,(9(6 7+$7 7+( '(6,*1 2) 7+( 1(: ," 7(50,1$/ $1' 6(5,$/ 35,17(5 '5,9(5 :28/' 127
+$9( %((1 $&&203/,6+(' ,1 7+( 6$0( $02817 2) 7,0( :,7+
7+( 6$0( $02817 2) 7+2528*+1(66 %< 7+( 75$',7,21$/ '(6,*1
7(&+1,48(6
:28/' /,.( 72 7+$1. 7+( 352-(&7 (1*,1((56?()) $1'/( 21
8&. $55< !+,7( $1' 5,. (66?)25 7+(,5 +$5' :25. $1'
7($0 63,5,7 :,7+ 63(&,$/ 7+$1.6 72 ()) )25 +,6 +(/3 :,7+ 7+(
),*85(6 )25 7+,6 3$3(5 7 :$6 $ 3/($685( 72 :25. :,7+ 7+(0 $6
352-(&7 /($' (1*,1((5 !,7+287 7+(0 7+,6 3$3(5 21 285 68&>
&(66 :,7+ 6758&785(' $1$/<6,6 $1' 6758&785(' '(6,*1 :28/'
127 +$9( %((1 3266,%/( :28/' $/62 /,.( 72 7+$1. 7+( 352-(&7
0$1$*(5 (/(67( 266 )25 +(5 :,//,1*1(66 72 75< 620(7+,1*
1(: $1' )25 +(5 6833257 $1' 7+( ,163(&7256 5(9,(:(56 $1'
02'(5$7256 )25 7+(,5 08&+ $335(&,$7(' 7,0( $1' ())257
($5&2 !"!" % % ! ! 5(1>
7,&(>$// 1& $*(>21(6 ! " ! !"!" % ! #285'21 1& !$ # "! % " !
(:/(77>$&.$5' 35,/ (5&./,1* !"!" % & !"!" &
& ! $7/(< $1' ,5%+$, !! & % ! &
! 256(7 286( 8*867 (:/(77>$&.$5' 2851$/
Download