Retro UNIX 386 v2 iin kernel programlama/gelitirme notlar...
(Erdoan Tan).. Tarih srasna gre gnlk taslak notlar.
------------------------------------------------------------------------------
(Yaplm ve yaplacak ilemleri/deiiklikleri aklamak ve hatrlamak iin.)

benioku.txt'den devam..
(O dosyann sonunda Retro UNIX v1.2, Kernel v0.2.2.0 tamamlanm oldu)

..burada yazdklarm Retro UNIX v1.2, Kernel v0.2.2.1'in gelitirme notlar.

09/05/2022'de....

1) u2.'s'de sysexec'de argument listi (ecore+pagesize) olan sanal bellek sonundan
4 byte geri ektim (lodsd ve dword move konutlarndan) argument list sonuna doru
genel protection fault -v1.1'de mount programn denerken karlatm- 
olumamas iin nlem aldm. (rnek: stack'tan argument count ekilir ve
son argument pointerden sonra son argument -asciiz string- lodsb yerine
lodsd ile alnrsa bellek sonuna denk gelen argument sonunda gpf oluabiliyor.
Yaptm deiiklik bu olasl engellemek iin.

2) u2.s'de sysstat sadece inode number ve inode structure dndryordu.
'pwd' ve 'cp' gibi programlarda mounted device number gerektii iin,
en uygun ve eskiyle (nceki programlarla) uyumlu yntem olarak inode'un
aygt/disk numarasn eax'de dndrecek ekleme yaptm. Root ise 0, 
mounted ise 1 dnyor. (1 olmak zorunda deil ama [idev] veya [cdev] iindeki say
dorudan disk numras deil; 0 ise root dev olduunu ve disk numarasnn [rdev] de
olduunu, 1 ise mounted dev olduunu ve disk numarasnn [mdev] de olduunu gsteriyor.
Orijinal unix v1 yntemi byle. Retro UNIX de sadece disk numaralar farkl.).

3) diskinit.s iindeki 'set_disk_parms' prosedrnde deiiklik yaptm.
Artk 1 silindiri ayrmadan ne kadar silindir varsa, disk kapasitesi
cylinders*spt*heads olarak doru hesaplanyor. (Eski haliyle son silindir
hesaba katlmyordu ve drv.size'a eksik sector count kaytlanyordu.)
Dzeltme monte edilen (mounted device) dosya sisteminin (sysmount iinde)
geerlilik kontrol ilemi olarak, free map byte count ile disk size
kyaslamasnda doru sonu almak iin gerekti. rnein: 360 byte olan
fd0 sperbloku free map byte says (offset 0'daki word) 360*8 = 2880
sektre karlk geliyor ama 80*18*2 olmas gerekirken, 79*18*2 hesaplanan
disk.size free map bit size ile karlatrldnda geersiz
sperblok (ierii) sonucuna yol ayordu. Bunu dzelttim.   	

4) sysmount iinde [rdev] indeki disk numarasnn ait olduu diskin
mount yaplmasn nleyen (yani root diskinin kendi alt dizinine mount edilmesini
nleyen) deiiklik yaptm. /dev/fd0 device numaras 0 olduu iin, bo
anlamndaki [mdev] = 0 ile akyordu. /dev/fd0 iin umount yaplrken
mount durumu olmad halde, [mdev] iindeki disk numaras 0 ile /dev/fd0
numras eit olduundan umount baarlym grnyordu. nce [mnti] iinde
mounting directory numarasnn olmas artn kontrol ettirerek bunu nledim.
nk mounted device yok ise [mnti] = 0 oluyor. Aksi takdirde sfr olmuyor.