gitweb on Svarog
projekti pod git sistemom za održavanje verzija -- projects under the git version control system 1 % skripta-os2.tex
2 % Skripta za predmet Operativni Sistemi 2, DMI, PMF, NS
3 % Doni Pracner, Ivan Pribela
4 % 2011/12 -- 2014/15
10 % osnovne informacije koje ce se prikazati na naslovnoj strani,
11 % kao i u informacijama u generisanom pdfu
27 %change the default font
34 %podesavanja outputa za pdf verzije
47 %\usepackage{keystroke}
48 % ispod je dodata alternativa za ovaj paket
56 draw,
57 fill=white,
59 rectangle,
60 rounded corners=2pt,
61 inner sep=1pt,
62 line width=0.5pt,
63 font=\small\sffamily
65 ;
66 }
72 %margine
77 %customize the itemize environments
81 \olditemize
87 }
89 %% ovi redovi daju header i footer
93 %\fancyfoot[C]{\thepage}
104 %\renewcommand{\footrulewidth}{0.5pt}
105 %\addtolength{\headheight}{0.5pt} % make space for the rule
111 }
114 %promene u marginama:
115 %\setlength{\marginparwidth}{32pt}
116 %\setlength{\textwidth}{620pt}
117 %\setlength{\textheight}{620pt}
120 %% specijalni blokovi koji služe kao podsetnici u radu ili napomene
124 }
128 }
130 %boldovane skice visokog prioriteta
137 % ako je sledeci red odkomentarisan nista od skica nece biti ispisano
138 % u finalni dokument
143 \maketitle
145 % theorems, definition etc.
146 %''''''''''''''''''''''''''
157 basicstyle=\ttfamily,
158 showstringspaces=false,
159 breaklines=true
160 }
163 % basicstyle=\footnotesize\ttfamily,
164 keywordstyle=\textbf,
166 breakatwhitespace=true,
167 % prebreak=\P,
168 % postbreak=\ding{229}\space,
169 language=Modula-2,
170 xleftmargin=1em
171 }
174 style=codeblock,
175 xleftmargin=4em
176 }
179 frame=lt,
180 % frameround=fftt,
182 % prebreak=\P,
184 xleftmargin=2em
185 }
188 style=codeblock,
189 numbers=left,
190 firstnumber=1,
191 stepnumber=1
192 }
198 % ----------------==================--------------------------------------
199 % Pravi pocetak rada
202 Programi u ovoj skripti su testirani sa kompajlerom ``GNU Modula 2'' (u
204 sistemima iz Debian porodice.
206 \tableofcontents
208 \newpage
210 %\begin{multicols}{2}
216 (GCC). Podržava nekoliko dijalekata jezika ``Modula 2'' --
217 najznačajniji su ISO standard i nekoliko varijacija koje je originalni
220 dobijaju i besplatne ISO, PIM i još neke biblioteke.
225 Tradicionalni prvi program ``Hello World'' bi izgledao ovako:
227 MODULE hello;
229 FROM StrIO IMPORT WriteString, WriteLn;
231 BEGIN
232 WriteString('hello world');
233 WriteLn
234 END hello.
237 Primećuje se razlika u modulu iz koga se uvoze komande u odnosu na
240 brojevima i tako dalje. Za pregled dostupnih biblioteka predlaže se
241 korišćenje zvanične stranice:
244 biblioteke.
246 Predpostavimo da je fajl napravljen u trenutnom direktorijumu,
248 ``joe'' koji se koristi na vežbama). Kreirani fajl se tada može
249 prevesti u izvršnu verziju sledećom komandom:
251 gm2 hello.mod
254 Ako je kod ispravan (kao onaj gore) u istom direktorijumu će se
257 ./a.out
260 direktorijuma (koji se označava tačkom). Ako je potrebno da
261 izvršni fajl ima neki drugi naziv može se koristiti poziv sledećeg
262 tipa:
264 gm2 -o imeIzlaznogFajla ulaznifajl
268 stranicu kompajlera.
269 %ovde je trebalo -{}- da razdvoji dva minusa, jer se inače tumače kao jedan.
273 Mapiranje procedura na sistemske pozive se može izvršiti preko
274 specijalnog definicionog modula koji u zaglavlju sadrži ključne reči
276 imenima sistemskih poziva i imaju parametre i povratne vrednosti
279 komande možemo videti sa
281 man system
284 odnosno videćemo da je poziv definisan na sledeći način:
286 int system(const char *command);
288 što znači da vraća ceo broj, a prima jedan argument koji je pokazivač
289 (što se označava *) na znak. Ovo je zapravo ceo string, pošto se u C
290 jeziku oni predstavljaju kao pokazivač na prvi znak, a string se onda
291 sastoji od svih sledećih znakova u memoriji dokle god se ne naiđe na
292 0C. Srećom, sve ovo se automatski mapira kreiranjem sledećeg modula:
295 DEFINITION MODULE FOR "C" Lib;
297 EXPORT UNQUALIFIED system;
299 PROCEDURE system(command: ARRAY OF CHAR): INTEGER;
301 END Lib.
304 Nije potrebno praviti prazne implementacione module. Iz ovakvog modula
305 se mogu uvoziti i koristiti procedure kao i iz bilo kakvog
306 ``normalnog'' modula, kao što se može videti u sledećem primeru, koju
307 od korisnika učitava stringove i pokušava da ih izvrši kao da su uneti
308 u komandnoj liniji, dokle god korisnik ne unese reč ``kraj'':
310 MODULE Zad2;
312 FROM StrIO IMPORT
313 ReadString, WriteString, WriteLn;
314 FROM StrLib IMPORT
315 StrEqual;
316 FROM Lib IMPORT
317 system;
319 TYPE
322 VAR
323 Komanda: String;
325 PROCEDURE Izvrsi(Komanda: ARRAY OF CHAR);
326 VAR
327 c: INTEGER;
328 BEGIN
329 c:= system(Komanda);
330 END Izvrsi;
332 BEGIN
333 WriteString("?> "); ReadString(Komanda);
334 WHILE NOT StrEqual(Komanda, "kraj") DO
335 Izvrsi(Komanda);
336 WriteString("?> "); ReadString(Komanda);
337 END;
338 END Zad2.
341 Prilikom mapiranja sistemskih poziva je moguće koristiti ``...'' na
342 kraju liste argumenata da se označi da je moguće proslediti
343 proizvoljan broj argumenata nakon navedenih, koji će biti premapirani
344 na odgovarajuće tipove podataka. Takođe je moguće i označiti da se
345 povratna vrednost procedure ne mora koristiti. U gornjem primeru je
349 vrednost.
351 Neki primeri pretvaranja tipova su dati u Tabeli~\ref{t-pretvaranje-tipova}, preuzetoj sa \url{http://www.nongnu.org/gm2/interface_to_c.html}.
356 Stvarni parametar & Konverzija & Tip vrednosti koji će biti prosleđen\\
357 \hline
358 123 & - & long long int\\
359 "hello world" & - & const char *\\
360 a: ARRAY OF CHAR & ADR(a) & char *\\
362 3.14 & - & long double
370 Korišćenje sistemskih poziva se može ilustrovati primerom čitanja
374 pokazivač kao ulazni parametar, a vraća pokazivač na slog koji
377 kraju i zatvara otvoreni direktorijum. Bitno je zatvarati otvorene
378 resurse jer je moguće da sistem odbije da otvori novi ako ih
379 proces već ima previše otvorenih.
381 Budući da su u pitanju sistemski pozivi niskog nivoa, veličine tipova
382 su nažalost promenljive i mogu zavisiti od konkretnog operativnog
384 sistem. Zbog ovoga su date dve varijante bibilioteke sa tipovima.
389 DEFINITION MODULE FOR "C" libdir;
391 FROM SYSTEM IMPORT
392 ADDRESS, BYTE;
394 EXPORT UNQUALIFIED opendir, readdir, closedir, PDir, DirEnt, PDirEnt;
398 (* types for 32 bit *)
399 TYPE
400 PDir = ADDRESS;
401 DirEnt = RECORD
402 ino: INTEGER;
403 off: INTEGER;
404 reclen: SHORTCARD;
405 type: BYTE;
407 END;
408 PDirEnt = POINTER TO DirEnt;
413 (* types for 64 bit *)
414 TYPE
415 PDir = ADDRESS;
416 DirEnt = RECORD
417 ino: LONGINT;
418 off: LONGINT;
419 reclen: SHORTCARD;
420 type: BYTE;
422 END;
423 PDirEnt = POINTER TO DirEnt;
427 PROCEDURE opendir(name: ARRAY OF CHAR): PDir;
428 PROCEDURE readdir(dirp: PDir): PDirEnt;
431 END libdir.
435 MODULE Zad3;
437 FROM StrIO IMPORT
438 WriteString, WriteLn;
439 FROM NumberIO IMPORT
440 WriteInt;
441 FROM Args IMPORT
442 Narg, GetArg;
443 FROM libdir IMPORT
444 opendir, readdir, closedir, PDir, PDirEnt;
445 FROM errno IMPORT
446 geterrno;
448 TYPE
451 VAR
452 Putanja: String;
453 n, i: INTEGER;
454 ok: BOOLEAN;
456 PROCEDURE Listaj(Ime: ARRAY OF CHAR);
457 VAR
458 dir: PDir;
459 entry: PDirEnt;
460 c: INTEGER;
461 BEGIN
462 WriteString("Folder "); WriteString(Ime); WriteLn;
463 dir:= opendir(Ime);
464 IF dir = NIL THEN
465 WriteString(" Greska broj "); WriteInt(geterrno(), 0); WriteString("."); WriteLn();
466 WriteString(" Ne mogu da otvorim direktorijum."); WriteLn();
467 ELSE
468 entry:= readdir(dir);
469 WHILE entry # NIL DO
471 WriteString(" "); WriteString(entry^.name); WriteLn;
472 END;
473 entry:= readdir(dir);
474 END;
475 c:= closedir(dir);
476 IF c = -1 THEN
477 WriteString(" Greska broj "); WriteInt(geterrno(), 0); WriteString("."); WriteLn();
478 WriteString(" Ne mogu da zatvorim direktorijum."); WriteLn();
479 END;
480 END;
481 END Listaj;
483 BEGIN
484 n:= Narg();
486 ok:= GetArg(Putanja, i);
487 WriteLn;
488 Listaj(Putanja);
489 END;
490 WriteLn;
491 END Zad3.
496 O pojedinim fajlovima možemo dobiti više informacija koristeći
499 će komanda upisati podatke. Obratiti pažnju da zbog ovoga struktura
500 već mora postojati u memoriji, ili kao lokalna promenljiva
501 odgovarajućeg slogovnog tipa, ili dinamički alocirana korišćenjem
502 pokazivača na nju.
504 Linux i mnogi drugi srodni sistemi za internu prezentaciju vremena
505 koriste broj sekundi od početka ``epohe'', odnosno od prvog januara
506 1970 godine. Za konverziju u klasičnije mere vremena se može koristiti
509 Kao i u prethodnom primeru date su dve verzije definicija nekih
510 tipova.
513 DEFINITION MODULE FOR "C" LibStat32;
514 FROM SYSTEM IMPORT
515 ADDRESS, BYTE;
516 EXPORT UNQUALIFIED stat, localtime,
517 Stat, PStat, Tm, PTm, PInt,
518 fifo, character, directory, block, regular, network, link, socket;
520 CONST
521 fifo = 1;
522 character = 2;
523 directory = 4;
524 block = 6;
525 regular = 8;
526 network = 9;
527 link = 10;
528 socket = 12;
532 (* types for 32 bit *)
533 TYPE
534 Stat = RECORD
535 dev: LONGINT;
536 ino: LONGINT;
537 mode: INTEGER;
538 nlink: LONGINT;
539 uid: INTEGER;
540 gid: INTEGER;
541 pad1: LONGINT;
542 rdev: INTEGER;
543 size: INTEGER;
544 blksize: INTEGER;
545 blocks: INTEGER;
546 atime: LONGINT;
547 mtime: LONGINT;
548 ctime: LONGINT;
549 END;
554 (* types for 64 bit *)
555 TYPE
556 Stat = RECORD
557 dev: LONGINT;
558 ino: LONGINT;
559 nlink: LONGINT;
560 mode: INTEGER;
561 uid: INTEGER;
562 gid: INTEGER;
563 pad1: INTEGER;
564 rdev: LONGINT;
565 size: LONGINT;
566 blksize: LONGINT;
567 blocks: LONGINT;
568 atime: LONGINT;
569 mtime: LONGINT;
570 ctime: LONGINT;
571 END;
575 Tm = RECORD
576 sec, min, hour,
577 mday, mon, year,
578 wday, yday, isdst: INTEGER;
579 END;
580 PTm = POINTER TO Tm;
581 PInt = POINTER TO INTEGER;
582 PStat = POINTER TO Stat;
585 PROCEDURE localtime(time: PInt): PTm;
587 END LibStat32.
591 MODULE Zad4;
593 FROM SYSTEM IMPORT
594 ADR;
595 FROM StrIO IMPORT
596 WriteString, WriteLn;
597 FROM NumberIO IMPORT
598 WriteInt;
599 FROM StrLib IMPORT
600 StrLen, StrConCat;
601 FROM Args IMPORT
602 Narg, GetArg;
603 FROM LibStat32 IMPORT
604 stat, localtime, Stat, PTm;
605 IMPORT LibStat32;
606 FROM errno IMPORT
607 geterrno;
609 TYPE
612 VAR
613 Putanja: String;
614 n, i: INTEGER;
615 ok: BOOLEAN;
617 PROCEDURE WriteMode(mode: INTEGER);
619 PROCEDURE WriteType(type: INTEGER);
620 BEGIN
621 IF type = lib32.fifo THEN
622 WriteString("f");
623 ELSIF type = lib32.character THEN
624 WriteString("c");
625 ELSIF type = lib32.directory THEN
626 WriteString("d");
627 ELSIF type = lib32.block THEN
628 WriteString("b");
629 ELSIF type = lib32.regular THEN
630 WriteString("-");
631 ELSIF type = lib32.network THEN
632 WriteString("n");
633 ELSIF type = lib32.link THEN
634 WriteString("l");
635 ELSIF type = lib32.socket THEN
636 WriteString("s");
637 ELSE
638 WriteString("?");
639 END;
640 END WriteType;
642 PROCEDURE WriteRWX(triplet: INTEGER);
643 BEGIN
645 WriteString("r");
646 ELSE
647 WriteString("-");
648 END;
650 WriteString("w");
651 ELSE
652 WriteString("-");
653 END;
655 WriteString("x");
656 ELSE
657 WriteString("-");
658 END;
659 END WriteRWX;
661 BEGIN
663 WriteRWX(mode DIV 64);
664 WriteRWX(mode DIV 8);
665 WriteRWX(mode);
666 END WriteMode;
668 PROCEDURE WriteTime(time: LONGINT);
669 VAR
670 tm: PTm;
671 BEGIN
672 tm:= localtime(ADR(time));
673 IF tm # NIL THEN
675 WriteString("-");
676 IF tm^.mon < 9 THEN
677 WriteString("0");
678 END;
680 WriteString("-");
681 IF tm^.mday < 10 THEN
682 WriteString("0");
683 END;
684 WriteInt(tm^.mday, 0);
685 WriteString(" ");
686 IF tm^.hour < 10 THEN
687 WriteString("0");
688 END;
689 WriteInt(tm^.hour, 0);
690 WriteString(":");
691 IF tm^.hour < 10 THEN
692 WriteString("0");
693 END;
694 WriteInt(tm^.min, 0);
695 ELSE
696 WriteString("??:??");
697 END;
698 END WriteTime;
700 PROCEDURE Listaj(Putanja: ARRAY OF CHAR);
701 VAR
702 info: Stat;
703 c: INTEGER;
704 BEGIN
705 c:= stat(Putanja, ADR(info));
706 IF c = -1 THEN
707 WriteString("?????????? ? ? KB ????-??-?? ??:??");
708 ELSE
709 WriteMode(info.mode);
710 WriteInt(info.nlink, 3);
712 WriteTime(info.atime);
713 END;
714 WriteString(" "); WriteString(Putanja); WriteLn;
715 END Listaj;
717 BEGIN
718 n:= Narg();
720 ok:= GetArg(Putanja, i);
721 WriteLn;
722 Listaj(Putanja);
723 END;
724 WriteLn;
725 END Zad4.
731 (``račva''). Novi proces je identičan sa originalnim, osim u svom
732 identifikacionom broj. Komanda ne prima parametre i vraća jedan integer, pa se može mapirati na sledeći način:
734 PROCEDURE fork(): INTEGER;
737 Oba procesa se nakon račvanja nastavljaju odvijati u sledećem redu
738 koda. Jedino po čemu se razlikuju je vrednost koju je vratio
741 ``deteta'', i može se koristiti za komunikaciju sa detetom, a u novom
742 procesu je ova vrednost jednaka nuli. Budući da je najčešće potrebno
743 da dete i roditelj rade različite stvari, to se obično rešava kodom
744 sledećeg oblika:
746 pid := fork();
747 IF pid = 0 THEN
748 (* "detetove" operacije *)
749 ELSE
750 (* "roditeljske" operacije *)
751 END;
755 originalnom procesu sa efektom da se proces uspava dokle god neki od
756 procesa dece ne završi sa radom. Veća kontrola nad ovim ponašanjem se
758 koji proces čekamo da se završi.
760 U sledećim sekcijama će biti ilustrovano nekoliko klasičnih primera
761 organizacije procesa.
769 pid := 0;
770 i := 1;
771 WHILE (pid = 0) AND (i < n) DO
772 pid := fork();
773 IF pid # 0 THEN
774 (* ... *)
775 ELSE
776 INC(i);
777 END;
778 END;
786 {
788 }
792 }
800 pid := -1;
801 j := 0;
802 WHILE (pid # 0) AND (j < m) DO
803 pid := fork();
804 IF pid # 0 THEN
805 INC(j);
806 ELSE
807 (* ... *)
808 END;
809 END;
818 {
820 }
823 }
831 dubina := 1;
832 brdece := 0;
833 WHILE (dubina < maxdubina) AND
834 (brdece < potrebnodece) DO
835 pid := fork();
836 IF pid # 0 THEN
837 INC(brdece);
838 ELSE
839 INC(dubina);
840 brdece := 0;
841 END;
842 END;
851 ]
856 }}};
859 čvorovi prikazuju vrednosti pri kreiranju};
864 % ----------------------------------------------
866 \newpage
868 \appendix
873 Ova sekcija treba da omogući instalaciju kompajlera GNU Modula 2 na
874 već postojeći GNU Linux operativni sistem iz Debian porodice, koja
875 uključuje i sve varijante Ubuntu distribucije, kao i Linux Mint i
876 mnoge druge. Kompajler je moguće bez većih problema instalirati i na
877 bilo koji drugi Linux (a i OSX i Windows), kompajliranjem iz izvornog
878 koda, za šta preporučujemo konsultovanje sa zvaničnom stranicom
881 Ovo uputstvo neće ulaziti u detalje kako instalirati operativni
882 sistem. Za one koje koriste Windows i nisu sigurni kako da paralelno
883 instaliraju drugi operativni sistem, preporučujemo korišćenje
884 virtuelne mašine (npr besplatni Virtual Box,
886 lakše skinuti već instaliranu mašinu sa nekim od Debian sistema, npr
887 Ubuntu ili Kubuntu, ili eventualno neku manje zahtevnu verziju kao što
888 je Lubuntu, ako su performanse problematične.
892 Prvi korak za instalaciju dodatnog kompajlera GNU Modula 2 je
893 dodavanje repozitorijuma softvera u sistem. Ovo se može uraditi ručnim
896 #
897 # GNU Modula-2 repo
898 #
900 deb http://floppsie.comp.glam.ac.uk/debian/ wheezy main
901 deb-src http://floppsie.comp.glam.ac.uk/debian/ wheezy main
904 Alternativno se mogu koristiti sledeće komande:
907 sudo add-apt-repository "deb http://floppsie.comp.glam.ac.uk/debian/ wheezy main"
908 sudo add-apt-repository "deb-src http://floppsie.comp.glam.ac.uk/debian/ wheezy main"
911 Većina sistema omogućava i da se ovo uradi preko nekih grafičkih
912 alata.
914 Nakon dodavanja novog izvora za softver potrebno je u konzoli uraditi
915 sledeće:
917 sudo apt-get update
918 sudo apt-get install gm2-doc gm2
921 Po želji se može skinuti i izvorni kod kompajlera sledećom komandom:
923 sudo apt-get source gm2
930 dodati izvori softvera i potrebno ih je ručno ponovo upaliti. Ovo se
932 ``\#'' sa početka redova koje želimo da koristimo ponovo ili
933 korišćenjem adekvatnih vizuelnih alata.
937 Pri pokušaju kompajliranja se na nekim sistemima može desiti da
940 pošto postoji problem u pakovanju kompajlera, ali moguće je da utiče i
941 na neke druge sisteme.
943 Greška se ispravlja na sledeći način (korisnik treba da
944 ima administrativna prava, zato se radi ``sudo'') ukoliko
945 je u pitanju 64-bitni sistem:
947 sudo su
948 cd /usr/lib
949 ln -sv /usr/lib/x86_64-linux-gnu/crti.o crti.o
950 ln -sv /usr/lib/x86_64-linux-gnu/crt1.o crt1.o
951 ln -sv /usr/lib/x86_64-linux-gnu/crtn.o crtn.o
952 exit
955 Za 32-bitne sisteme važi ista ispravka, jedino što se u komandama
956 treba zameniti ``x86\_64'' sa ``i386''.
960 \newpage
964 Ukratko ćemo predstaviti editor ``joe''. Odabran je zbog svoje
965 rasprostranjenosti, potpune funkcionalnosti u tekstualnom modu rada
966 (korišćenje iz terminala) te vrlo jasnom sistemu pomoći koji se može
967 koristiti pri radu. Na nekim sistemima on dolazi već instaliran, a na
968 skoro svima se lako može dodati iz repozitorijuma. Na Ubuntu i sličnim
969 sistemima se ovo može uraditi sa:
971 sudo apt-get install joe
973 Ili analogno na drugim sistemima za instaliranje softvera.
975 Otvaranje postojećeg fajla ``hello.mod'' za uređivanje, odnosno
976 otvaranje novog praznog fajla u koji ćemo unositi odgovarajući kod ili
977 tekst se može postići sledećom komandom:
979 joe hello.mod
984 Joe je po svojoj prirodi bogat prečicama na tastaturi. U daljem tekstu
985 će biti navedene mnoge od njih. Kod svih se navodi redosled
986 pritiskanja tastera individualno, a ako su negde tasteri spojeni sa
987 ``+'' (alternativno sa ``-'') onda ih je potrebno pritisnuti
988 odjednom. Neki primeri:
1001 U okviru sistema pomoći koji je ugrađen u sam editor uglavnom se
1002 pojavljuju skraćeni oblici:
1012 Za pomoć pri korišćenju ediora ``joe'' preporučujemo pritiskanje
1014 komandi u gornjem delu editora. Postoji nekoliko stranica ove pomoći
1018 U okviru pomoći postoje maltene sve komande koje editor pruža, a na
1019 kraju su čak uključene i ASCII tabele znakova. Preporučuje se makar
1020 ovlašno upoznavanje sa stranicama pomoći i mogućnostima editora.
1024 Snimanje sa izlaskom iz programa se može uraditi sa \Ctrl
1027 slučaja ``joe'' pita za ime fajla koji snimamo, pri čemu kao podrazumevanu
1028 vrednost ponudi trenutno ime.
1030 Joe može raditi sa više fajlova odjednom. Novi fajl se može otvoriti
1032 polje za kucanje imena fajla koje dozvoljava i da se putanja
1033 automatski dopunjava mogućnostima pritiskom na taster \Tab (Tab), baš
1034 kao i u komandnoj liniji.
1036 Prelazak na sledeći, odnosno prethodni, otvoreni fajl se dobija pritiskom
1040 standardna komanda za ``ubijanje'' trenutnog procesa u terminalu), pri
1041 čemu će ``joe'' pitati da li želimo da izađemo ako postoje promene
1042 koje nisu snimljene. Ako je u pitanju bio jedini otvoren fajl, tada će
1043 se i sam editor zatvoriti.
1049 Premeštanje i kopiranje delova teksta je malo drugačije nego u
1050 klasičnim grafičkim programima. Prvo je potrebno označiti željeni
1052 početak bloka na trenutnu poziciju kursora, a \Ctrl
1054 selekcija biti i vizuelno označena. Sada je moguće na proizvoljnom
1055 mestu u istom ili drugom dokumentu pritisnuti \Ctrl
1063 može odabrati više opcija za rad, kao što su margine, automatsko
1065 sintaksno bojenje itd.
1069 ``Joe'' ima mogućnosti i da podeli radnu površinu na nekoliko prozora
1070 koji omogućavaju da se vidi više dokumenata, ili čak da se vide
1071 različiti delovi istog dokumenta. Prozor se deli na dva komandom \Ctrl
1075 sledeći, odnosno prethodni prozor se dobija pristikom na \Ctrl
1078 omogućuje da se naizmenično vide svi prozori, ili samo jedan.
1081 kao da se zaledio verovatno je problem što je stisnuta ``klasična''
1083 ovom programu, a nažalost izaziva prekid osvežavanja ekrana. Efekat
1089 \newpage
1093 sistemom otvori terminal (konzola, komandna linija) na udaljenom UNIX
1094 serveru. Može se naći online na
1097 Po pokretanju se prikazuje dijalog u kome se može ukucati adresa
1098 udaljenog računara i konfigurisati mnogi parametri. Najčešće je dosta
1099 samo uneti adresu računara i pokrenuti konekciju. Nakon toga (ako je
1100 uspešno povezivanje) biće prikazan ekran za unos korisničkog imena i
1101 lozinke.
1106 Putty (kao i većina standardnih linux terminala koji koriste
1108 može dovesti u stanje da ne prikazuje ispis unosa na ekranu, pritiskom
1110 standardnom prečicom za snimanje u većini grafičkih aplikacija, pa se
1111 može nehotično aktivirati. Iz ovog režima rada se može izaći prečicom
1114 Do not press
1115 Ctrl S
1116 If you do
1117 Ctrl Q
1120 Smisao postojanja ovakve opcije je dobrim delom istorijski, iz vremena
1121 kad su brzine protoka bile veoma male, i kada se štedelo time što bi
1122 se privrmeno isključio protok kada nisu neophodne povratne
1123 informacije, na primer kod komandi koje se dugo izvršavaju. Naravno
1124 ovo ima svoje primene i danas kod slabijih veza, ili kod mobilnih veza
1125 koje se plaćaju po protoku, a nekad se može i dobiti na brzini
1126 izvršavanja programa, ako se ne gubi vreme na osvežavanje ekrana.
1130 %\end{multicols}