Saturday, October 13, 2007

Limitasi Memory hanya 1.5GB pada Blender3D oleh Windows

0. You are using Windows 2000, 32bit XP, or 32bit Vista.
1. You are working with complex scenes that take up 1GB RAM or more.
2. You have more than 1GB of physical RAM. If you have less RAM, you'll run into other problems long before you have to worry about this.
3. Blender crashes unexpectedly when the RAM usage reaches about 1.5GB.

This article is NOT for you if:

1. Yours scenes are relatively simple and take up less than 1GB of RAM at any given time.
2. You have very little physical RAM (Less than 1GB).
3. Blender crashes for other reasons, ie unstable video drivers, software conflict...

The problem:

Basically 32bit Windows is designed so that ANY SINGLE application can only utilize up to 2GB of RAM. Realistically, the maximum amount of RAM a program can use before it crashes is around 1.5GB. This does not cause a problem for day-to-day applications because they usually stay well below this limit. But when working with Blender, especially baking fluids, or rendering high resolution images with composite node, memory usage can easily reach 1.5GB+. Without proper configuration, Blender crashes.

View of the Task Manager (Ctrl+Alt+Delete) when blender is in a 'healthy' state.

Remember this is a software limitation due to the design of Windows, you can install 4GB of physical RAM on your computer, and set-aside a 4GB swap file, Blender will still crash at the 1.5GB mark. Thankfully there is a fix for the problem:

The Solution for 32bit Windows:

This is a two step procedure. We will raise the memory limit Windows allocate to each application from the default 2GB to 3GB. This way, our favorite application (blender?) can effectively use about 2.5GB of RAM for itself(a significant increase from the default 1.5GB). And here is how we do that in Windows 2000/XP:

Warning: Editing boot.ini could cause your computer to become unbootable. If you are unsure of what you are doing, do some research before continuing.


Step 1.

1. Right click on My Computer, Click Properties, go to the Advanced tab, click on Settings under Startup and Recovery, click on Edit in the new window that pops up, boot.ini should open in notepad. Now, find the line that looks like this:

multi(0)disk(0)rdisk(0).....="Windows XP" /fastdetect

Append this 5 characters to the end of the line, without the quote:
" /3GB"

With this switch, your computer will allocate 3GB to applications. Reboot your computer for the change to take effect.

For 32bit Vista users only: Setting the '3GB' Flag in 32bit Windows Vista


Step 2: (For all 2000/XP/Vista users)

Find a version of Blender that is compiled with the LAA (Large Address Aware) flag. 'Official' Blender releases are not compiled with LAA. But this one does: Here is the clean Blender 2.45 compiled with the LAA flag. LAA blender requires the /3GB flag to be used, as described above. Without the /3GB flag, LAA blender behaves normally just like any other Blender release.

Step 3: There is no step 3

So that's it. With the above 2 steps, your Blender should be able to render fluids at resolution 500 and render still images at 3200x2400 without any problem. Remember, /3GB and LAA need be used together for this trick to work.


FAQ

Q: I only have 1GB of physical RAM (or less), should I worry about this article?
A: The short answer is no. It is unlikely that you will truly hit the 1.5GB barrier, since the OS takes up some memory as well, by the time Blender is using 1.5GB of RAM, your computer is probably using close to 2GB of total memory, which would be painfully slow (due to the performance hit of using the swap file) that most users would just think their computer has 'froze' and hit the reset button.

Q: What about 64bit Blender?
A: Using the same 32bit LAA Blender 2.45 on 64bit Windows can give you 4GB of available RAM space per application to work with, once 64bit Blender is out, this number will probably go up to 8TB on 64bit Windows.

Q: What about Linux or OS X?
A: To the best of my knowledge, 32bit Linux, has this memory wall at around 3.5GB or so. I am not sure about OS X. (comments would be appreciated) Edit: Thanks Tux Runner

Q: So this fix completely solves the problem?
A: No. To quote jlh on blendernation, this fix just relocates the problem from 1.5GB to 2.5GB and linux will probably not go higher than 2.5GB either. All in all, it boils down to: 32-bit systems are starting to hit their limits. And it's no different with linux. 64bit is a mandatory upgrade once program starts using more than 4GB of memory.

Q: My computer is running funny with the "\3GB" switch
A: The DirectX 9 API has issues with the 3GB flag, thus rarely some older games experience problem when ran under the 3GB flag.

Summary

General memory limits32-bit64-bit
Virtual address space per 32-bit process2 GB, 3 GB if the system is booted with the /3GB switch and application is LAA2 GB, 4 GB if the application is compiled with the /LARGEADDRESSAWARE switch
Virtual address space per 64-bit processNot applicable8 terabytes

Sunday, August 19, 2007

Filter dengan IPTABLES

Iptables merupakan aplikasi untuk administrasi filtering paket dan Network Address Translation (NAT) pada IPv4. Gambaran umum, iptables digunakan untuk konfigurasi, merawat dan memeriksa rules tables (tabel aturan) tentang filter paket IP yang terdapat di kernel linux. Tiap-tiap tables memiliki beberapa built-in (bawaan) chains kernel linux dan chains buatan user sendiri. Setiap chains memiliki list / daftar aturan untuk mencocokkan suatu paket yang datang. Setiap aturan tersebut berfungsi memberikan keputusan eksekusi apa yang akan dilakukan bila paket yang datang cocok dengan aturan yang telah dibuat.

Berikut gambaran dan contoh kegunaan iptables :



Terlihat bahwa komputer A, B dan C mengirim paket data kepada komputer D yang sudah dilengkapi iptables. Pada konfigurasi iptables dibuat pernyataan bahwa hanya paket yang memiliki huruf c yang boleh diterima komputer D, selain itu ditolak semua. Dan hasilnya, hanya komputer C saja yang bisa mengirimkan paket dan diterima komputer D. Tentunya dengan gambaran sederhana ini kita bisa membayangkan kegunaan iptables lebih detail. Misalkan bila ada komputer asing yang mengirimkan paket data untuk keperluan scanning atau hacking maka paket tersebut langsung ditolak oleh komputer kita.

Iptables memiliki 4 tabel aturan yaitu filter, nat, mangle dan raw. Yang akan saya bahas adalah aturan "filter" karena ini yang seringkali digunakan dalam pengaturan jaringan. Kita sudah tahu bahwa pada table terdapat chains (rantai) yang berisi rules / aturan. Namun perlu diketahui tiap table memiliki chains yang berbeda-beda. Chains pada tables "filter" dari 3 fungsi yaitu INPUT, FORWARD dan OUTPUT. INPUT untuk paket yang disiapkan untuk soket lokal atau komputer kita sendiri. FORWARD untuk paket yang diarahkan / routing ke box dan OUTPUT untuk paket yang di generate / dibuat sendiri. Cara gampangnya untuk memahami, chains INPUT berguna untuk mengatasi paket data yang masuk. FORWARD berguna untuk mengalihkan paket yang datang dan OUTPUT berguna untuk menghasilkan paket data yang akan diteruskan nantinya.



Setelah kita mengetahui ketiga fungsi chains tersebut maka kita perlu mengetahui command / perintah dalam konfigurasi iptables. Perlu diketahui bahwa dalam satu chain terdiri dari beberapa rule / aturan. Tiap-tiap aturan tersebut memiliki urutan prioritas tersendiri. Bila ada paket datang maka akan disesuaikan dengan chains. Setelah dikelompokkan maka paket tersebut diseleksi oleh rule yang terdapat pada chain. Bila ada paket datang yang tidak cocok dengan aturan pertama maka akan diteruskan menuju seleksi aturan kedua dan selanjutnya hingga aturan terakhir. Berikut command-command yang umum digunakan :

-A
yaitu append. Memiliki struktur -A [chain] [aturan]. Berfungsi untuk menetapkan aturan ke dalam chains. Contoh : iptables -A INPUT -s 192.168.0.1

-D
yaitu delete aturan. Memiliki struktur -D [chain] [aturan] atau -D [chain] [nomor urutan aturan]. Berfungsi untuk menghapus aturan dari chains atau menghapus aturan berdasarkan urutan list didalam chains. Contoh : iptables -D INPUT 1 ( menghapus aturan pertama dalam chain INPUT )

-I
yaitu insert. Memiliki struktur -I [chain] [nomor urutan aturan] [aturan]. Berfungsi untuk memasukan aturan baru kedalam chain. Bila nomor urutan aturan adalah 1 berarti aturan tersebut dimasukkan ke prioritas utama dalam chain. Contoh : iptables -I OUTPUT 2 -s 192.168.0.1

-R
yaitu replace. Memiliki struktur -R [chain] [nomor urutan aturan] [aturan baru]. Berfungsi untuk menimpa / me-replace aturan lama dengan aturan baru dalam chain. Contoh : iptables -I OUTPUT 2 -s 192.168.0.1 ( menimpa rule kedua dengan rule baru -s 192.168.0.1

-L
yaitu list. Memiliki struktur -L [chain]. Berfungsi untuk menampilkan daftar aturan-aturan didalam chain. Bila chain tidak disertakan maka akan muncul aturan dalam semua chain. Contoh : iptables -L INPUT

-F
yaitu flush. Memiliki struktur -F [chain]. Berfungsi untuk menghilangkan semua aturan pada chain. Contoh: iptables -F FORWARD ( menghapus semua aturan didalam chain FORWARD )

-N
yaitu new. Memiliki struktur -N [chain]. Berfungsi untuk membuat chain baru. Contoh: iptables -N GET

-X
yaitu delete chain. Memiliki struktur -X [chain]. Berfungsi untuk menghapus chain dan ini berbeda dengan -D yang berguna untuk menghapus rule saja. Untuk menghapus chain, dipastikan terlebih dahulu bahwa tidak ada aturan-aturan didalam chain tersebut. Dapat digunakan flush untuk menghapus aturan-aturan di dalam chains, Contoh: iptables -X GET

-E
yaitu rename chain. Memiliki struktur -E [chain lama] [chain baru]. Berfungsi untuk me-rename / mengganti nama chain yang ada didalam iptables. Contoh: iptables -E GET PUT

Setelah kita mengetahui perintah-perintah pada iptables, yang kira perlu pahami berikutnya adalah parameter. Kita melihat contoh perintah "iptables -I OUTPUT 2 -s 192.168.0.1". Disini, -s merupakan parameter. Kegunaan parameter adalah untuk mengidentifikasikan spesifikasi aturan dan digunakan untuk mengikuti perintah umum seperti add, delete, insert, replace dan append.

-p

yaitu menunjukkan protokol. Untuk mengindentifikasikan protokol dalam rule seperti tcp, udp, icmp,dst diperlukan parameter ini.Contoh: iptables -A INPUT -p tcp

-m
yaitu match option. Mirip dengan -p tetapi perbedaannya adalah modul yang digunakan. Bila pada -p menggunakan modul yang bersifat spesifik tetapi berbeda dengan -m. Dengan menggunakan parameter ini, kita bebas menentukan nama module yang dipakai dan meng-variasikannya dalam perintah selanjutnya. Contoh : iptables -A INPUT -s 192.168.0.0/16 -m comment --comment "IP yang di-blok" ( berarti modul comment berisi perintah --comment "IP yang di-blok" )

-s
yaitu source alamat hostname / ip. Contoh : iptables -A INPUT -s 192.168.0.1

-d
yaitu destination / tujuan dari alamat ip. Contoh: iptables -A INPUT -d 192.168.0.2

-j
yaitu jump. Berfungsi untuk memberikan keputusan setelah paket data cocok dengan aturan. Biasanya terdapat di akhir perintah dan diikuti argumen perintah. Contoh : iptables -A INPUT -s 192.168.0.2 -j DROP.

-i
yaitu in-interface alias nama interface yang menerima kiriman paket ( terbatas pada chain INPUT, FORWARD dan PREROUTING saja ). Contoh: iptables -A INPUT -i eth0 -s 192.168.0.2

-o
yaitu out-interface alias nama interface yang akan mengirim paket keluar (terbatas pada chain FORWARD, OUTPUT dan POSTROUTING). Contoh : iptables -A INPUT -o eth1 -s 192.168.0.2

-c
yaitu counter untuk menghitung paket-paket yang lewat dari sebuah aturan. Penulisan parameter ditulis sebelum command semacam APPEND,INSERT,REPLACE,dst. Contoh : iptables -c -A INPUT -s 192.168.0.2

-n
yaitu numeric. Parameter ini akan menampilkan output numeric seperti hostname,ip, port, nama network,dst. Contoh: iptables -L -n

-v
yaitu verbose yang berarti menampilkan informasi secara keseluruhan alias dalam bahasa indonesia terjemahannya "bertele-tele". Contoh: iptables -L -n -v

Sekarang kita sudah mendapatkan gambaran tentang penggunaan berbagai command dalam iptables. Lalu apa yang kurang? Argumen! argumen dibutuhkan untuk menentukan tindakan apa yang akan dilakukan setelah paket tersebut cocok dengan aturan pada iptables. Ada beberapa argument seperti:

ACCEPT,
Menerima paket data yang datang.

DROP
mengesampingkan paket data yang datang dan tidak memberikan reply. Sehingga paket yang datang langsung dibuang begitu saja tanpa memberikan balasan report kepada pengirim paket.

REJECT
menolak paket data yang datang. Berbeda dengan DROP, REJECT mengembalikan kembali paket yang telah dikirimkan tanpa flag / report.

DENY
menolak paket data yang datang dengan memberikan informasi. Berbeda dengan REJECT, DENY akan memberikan flag / informasi kepada pengirim paket bahwa paket yang dikirimkan telah ditolak.

Nah, sekarang kita sudah mendapatkan gambaran umum bagaimana cara konfigurasi iptables. Berikut akan saya sertakan contoh - contohnya:

#membuang (drop) semua kiriman paket dari ip address 192.168.0.1
ehud:~# iptables -A INPUT -s 192.168.0.1 -j DROP

#menerima paket TCP dari range ip address 192.168.0.1 sampai 192.168.0.15
ehud:~# iptables -A INPUT -p TCP -s 192.168.0.1/192.168.0.15 -j ACCEPT

#menolak semua paket ping loopback lokal ( interface yang digunakan adalah lo )
ehud:~# iptables -A INPUT -i lo -p ICMP -j DENY

#melihat list daftar aturan
ehud:~# iptables -L -n -v

selamat mencoba..

Saturday, August 4, 2007

MEMBUAT PARTISI DI SLACKWARE

Ketika pertama kali saya berkenalan dengan Slackware, hal peprtama yag membingungkan adalah pembuatan partisi. Berulangkali saya mencoba menginstall dan tidak pernah berhasil karena kekeliruan dalam pembuatan partisi. Jika distro lain memberikan beberapa pilihan bahkan otomatis dalam hal pembuatan partisi, tidak demikian halnya dengan Slackware. Slackware hanya menyediakan tool partisi yang dapat dilakukan secara manual. Namun menurut saya saat ini sudah cukup mudah dilakukan dengan menggunakan cfdisk atau fdisk yang secara default sudah disediakan oleh Slackware. Disini kita akan menggunakan cfdisk utk mempartisi harddirve. Untuk menggunakannya, ketikkan command cfdisk sehingga menjadi seperti gambar berikut.

Pilih [New] untuk membuat partisi baru. Yang harus anda ketahui adalah untuk bergerak antar menu anda bisa menggunakan panah kiri dan kanan. Sementara untuk bergerak antar partisi menggunakan panah atas dan bawah. Untuk memilih salah satu menu anda harus menggunakan enter.

lalu anda akan diberi pilihan jenis partisi yang akan dibuat. Primary atau Logical. Pilih [Primary].

kemudian tentukan ukuran (dalam MiB) partisi yang akan digunakan berdasarkan free space atau sisa ruang kosong yang tersedia.

langkah selanjutnya anda akan diberi pilihan posisi partisi apakah akan diletakkan di track awal atau di bagian akhir. Pilih saja [Beginning].

partisi pertama sudah anda siapkan dengan nama hda1 sehingga terlihat seperti gambar berikut.

Selanjutnya kita akan membuat partisi berikutnya. Karena GNU/Linux memerlukan minimal dua partisi yaitu partisi root (/) dan swap (semacam virtual memory di windows). Mulailah seperti langkah pembuatan partisi hda1 diatas dengan memilih free space yang masih ada hingga menjadi seperti gambar berikut.

seperti rencana semula bahwa partisi kedua ini akan kita gunakan sebagai swap dimana biasanya partisi ini besarnya adalah kurang lebih dua kali jumlah memory yang terpasang. Untuk itu kita harus mengganti tipe file system hda2 menjadi linux swap. Untuk itu pilih menu [ Type ] seperti gambar berikut.

selanjutnya akan muncul beragam file system (banyak sekali) yang bisa digunakan seperti diperlihatkan gambar berikut. Tekan sembarang tombol jika fyle system yang ada cari sudah/belum ditemukan.

pada gambar diatas kita lihat bahwa linux swap memiliki nomor kode 82, maka pada menu berikutnya masukkan angka 82 sebagaimana gambar berikut.

setelah melalui langkah diatas anda sudah memiliki partisi linux swap sebagaimana ditunjukkan gambar berikut.

langkah selanjutnya adalah memberikan penanda (Flags) pada partisi yang akan kita jadikan sebagai partisi boot (diwindows dikenal sebagai partisi active) yang nantinya akan digunakan sebagai tempat boot system. Pilih hda1 (partisi root) lalu pilih menu [Bootable] sehingga hda1 memiliki flags boot sebagaimana gambar berikut.

langkah berikutnya adalah mengeksekusi konfigurasi partisi yang sudah kita siapkan diatas dengan memilih menu [ Write ]

sehingga akan muncul pilihan iya atau tidak. Untuk melanjutkan proses berikutnya pilih yes, maka proses pembuatan partisi akan berjalan...

jika sudah selesai pilih menu [ Quit ] untuk keluar dari cfdisk.

Selamat.... partisi harddrive anda sudah siap digunakan utuk instalasi Slackware atau distribusi GNU/Linux lainnya.

Catatan :

  • Apabila anda membuat partisi tidak lebih dari empat partisi anda bisa membuat seluruh partisi sebagai primary partition sementara apabila sudah lebih dari 4, partisi ke 4 dan seterusnya haruslah logical.

  • Anda juga harus menentukan satu partisi sebagai bootable partition. Biasanya yang di set bootable partition adalah root partition.

  • Untuk swap anda bisa mempergunakan maksimal dua kali besar memori yang terpasang di komputer anda apabila memori yang anda miliki kurang dari 512 MiB. Apabila RAM yang anda miliki sudah lebih dari 512 MiB anda cukup membuat swap sebesar RAM yang anda miliki.

  • Partisi minimal yang harus anda buat untuk bisa berhasil menginstall slackware atau distriibusi GNU/Linux lainnya adalah dua partisi yaitu root ( / ) dan swap

Monday, July 30, 2007

Slack Inst. 12.0

Catatan:
Pada tulisan ini partisi-partisi untuk Slackware sudah disiapkan sebelumnya.

0. Setting BIOS utk Booting via CDRoom/DVDRoom.
1. Masukkan CD-1 Slackware dan boot komputer Anda.
2. Pada dialog "Enter 1 to select a keyboard map", [ENTER].
3. Pada dialog "slackware login:" masukkan "root", [ENTER].
4. Pada dialog "root@slackware:/#" masukkan setup, [ENTER].
5. Akan muncul dialog "Slackware Linux Setup (version 12.0) dengan berbagai pilihannya.
6. Pilih Swap [Enter].
Pilih partisi swap yang akan dipakai, misal /dev/hda6.
7. Pada dialog "Check Swap Partitions For Bad Blocks", boleh pilih Yes atau No. Pilihlah Yes untuk memeriksa Bad Blocks. Kemudian muncul dialog "SWAP SPACE CONFIGURED" yang menyatakan partisi swap yang kita pilih sudah siap. [Enter].
8. Kemudian muncul dialog "Select Linux installation partition:" yaitu dimana kita bisa memilih partisi yang mau dipakai untuk system linux dan program-programnya (disebut "/" {root}).
Pilih /dev/hda5 misalnya yang sudah kita siapkan. (besarnya sekitar 6GB agar memungkinkan untuk memuat full install).
[Enter) untuk melanjutkan.

9. Pada Dialog "Format Partition /dev/hda5"* (*atau partisi yang tadi sudah dipilih), pilih [Format], pilih ext3 Journalising Filesystem atau yang lainnya (bebas). [Enter]

10. Pada Dialog "Select Inode", pilih yang default (=4096) saja, [Enter] dan tunggu beberapa saat

11. Kemudian dialog "Select other Linux partitions for /etc/fstab", artinya pilih partisi linux lainnya yang mau ditambahkan ke system linux kita. Misalnya pilih /dev/hda7 yang dipersiapkan untuk /home, , kemudian pilih [Format], [ext3 journalising], inode [4096] pada dialog-dialog seterusnya.

12. Pada dialog "MOUNT POINT FOR /dev/hda7"* (*atau partisi yang kita pilih), masukkan /home dan pilih

13. Muncul berita "DONE ADDING LINUX PARTITIONS TO /etc/fstab", artinya partisi-partisi linux sudah dimasukkan ke system yang akan kita install.

14. Pada dialog "FAT or NTFS PARTITIONS DETECTED", [yes, ENTER].

15. Pilih partisi FAT atau NTFS dari MsWin yang mau dibuat bisa-dibaca oleh system linux, misal /dev/hda1, [Enter]

16. Pada dialog "Pick Mount Point ...", ketikkan misalnya /windos [OK], juga [OK] pada dialog informatif berikutnya.

17. Muncul dialog "SOURCE MEDIA SELECTION", pilih [1] Install from a Slackware CD or DVD [Enter]

18. Pada "SCANNING FOR CD or DVD DRIVE", pilih [auto],
Tunggu beberapa saat.

19. Muncul "PACKAGE SERIES SELECTION", pakai pilihan paket-paket yang default saja, jadi langsung saja dengan mengetikkan [ENTER], pada dialog berikutnya pilih [full], maka Slackware akan memulai instalasi. [Waktu saat ini: Pk. 21:22]
Berdasarkanketerangan di situs resminya paket-pakt slackware dibagi kedalam beberapa bagian yg dipisahkan berdasarkan abjad tertantu.
A - The base system. Contains enough software to get up and running and have a text editor and basic communications programs.
AP - Various applications that do not require the X Window System.
D - Program development tools. Compilers, debuggers, interpreters, and man pages. It's all here.
E - GNU Emacs. Yes, Emacs is so big it requires its own series.
F - FAQs, HOWTOs, and other miscellaneous documentation.
GNOME - The GNOME desktop environment.
K - The source code for the Linux kernel.
KDE - The K Desktop Environment. An X environment which shares a lot of look-and-feel features with the MacOS and Windows. The Qt widget library is also in this series, as KDE requires it to function.
KDEI - Language support for the K Desktop Environment.
L - System libraries.
N - Networking programs. Daemons, mail programs, telnet, news readers, and so on.
T - teTeX document formatting system.
TCL - The Tool Command Language, Tk, TclX, and TkDesk.
X - The base X Window System.
XAP - X applications that are not part of a major desktop environment. For example Ghostscript and Netscape.
Y - Games (the BSD games collection, Sasteroids, Koules, and Lizards).


20. Slackware mulai menginstall paket-paket menurut seri-serinya. Tunggu beberapa saat.

21. [Waktu saat ini: Pk. 21:24], muncul "INSERT NEXT DISC" dan CD-1 di-eject oleh komputer. Masukkan CD-2 dan pilih [Enter]

*22. [Waktu saat ini: Pk. 21:34] muncul dialog "WARNING: NO ROOT PASSWORD DETECTED", pilih untuk memasang password root (=Administrator). [Enter]

*23. Masukkan password root dan konfirmasi password root.

(*bila tidak muncul, lewatkan saja, akan dibahas lagi di bawah)

24. Muncul "CONFIGURE THE SYSTEM" [Yes, Enter]

25. Muncul "INSTALL LINUX KERNEL", jawab [cdrom, OK, Enter]

26. Pilih default saja yaitu /cdrom/kernels/sata.i/bzImage [Enter]

27. "MAKE BOOTDISK", pilih Create, masukkan sebuah floppy kosong SANGAT DIANJURKAN MEMBUAT FLOPPY BOOT!!
atau boleh pilih [Skip] di sini utk melewatkannya dan melanjutkan pada langkah berikutnya. TIDAK DIANJURKAN.

28. "MODEM CONFIGURATION", [no modem, Enter] tergantung perangkat yg terinstall.

29. "Enable Hotplug ", [Yes, Enter]

30. "INSTALL LILO", [simple, OK]
31. "CONFIGURE LILO TO USE FRAMEBUFFER CONSOLE?", [1024x768x256, Enter]
32. "OPTIONAL LILO ...", kosongkan saja [OK, Enter]
33. "SELECT LILO DESTINATION", jawab [root, OK]
34. "MOUSE CONFIGURATION" pilih ps/2 atau usb tergantung pada jenis mouse Anda. [OK]
35. "GPM CONFIGURATION", [Yes,Enter]
36. "CONFIRM STARTUP SERVICE TO RUN], ikuti default, langsung [ENTER] saja.
37. "CONSOLE FONT CONFIGURATION", [No, Enter]
38. "HARDWARE CLOCK SET TO UTC?", [No, Enter]
39. "TIMEZONE Configuration", pilih Asia/Jakarta, [OK]
40. "SELECT DEFAULT WINDOW MANAGER FOR X", pilih xinitrc.kde [OK]
41. "WARNING: no root password", jawab , untuk memasukkan password root. Masukkan password root dua kali.
42. "REPLACE /etc/fstab", jawab
43. "SETUP COMPLETE". Restart komputer Anda dengan Crtl-Alt-Del. (Instalasi telah selesai).
45. Keluarkan CD instalasi.

Friday, June 15, 2007

Tentang BGP

Dapatkah Anda bayangkan bagaimana dunia Internet sebenarnya? Marilah kita urai satu per satu. Dunia Internet juga memiliki daratan, kota, dan penduduk seperti halnya dunia sungguhan. Pulau-pulau, daratan besar, dan benua di dunia Internet adalah ruangan-ruangan NOC dan data center dari penyedia jasa backbone Internet di seluruh dunia atau sering disebut dengan istilah Network Access Point (NAP) Provider. ISP-ISP yang berada di bawah penyedia jasa backbone Internet ini adalah kota-kota besar dan kota metropolitannya.


ISP sebagai kota metropolitan isinya juga terdiri dari kota-kota kecil dan area-area lainnya. Kota-kota kecil dan area lain, yaitu server-server dan perangkat jaringan yang jumlahnya sangat banyak yang bertugas sebagai pelayan para pengguna. Point Of Presence (POP) milik ISP yang tersebar di area sekitar ISP juga merupakan kota-kota kecil di dalam ISP. Di dalam kota-kota kecil tersebut, terdapatlah penduduk yang beraktivitas di dalamnya. Penduduk dari dunia Internet ini adalah Anda para pengguna Internet, yang seluruhnya adalah juga penduduk dunia nyata.
Di dalam dunia Internet komunikasi antarpenduduk juga merupakan kebutuhan vital. Bukan hanya vital, justru keperluan berkomunikasilah sumber dan cikal bakal dari terciptanya dunia Internet. Untuk dapat melayani penduduknya berkomunikasi, dibuatlah jalan-jalan penghubungnya. Jalan penghubung dunia Internet adalah media komunikasi data yang jenisnya sangat banyak.
Sebuah jalan kecil dan setapak mungkin dapat dibentuk oleh sebuah line telepon yang biasa ada di rumah-rumah Anda. Jalan yang agak besar mungkin dapat dibentuk oleh koneksi leased line, ADSL, Cable, ISDN, dan banyak lagi. Jalan raya yang besar mungkin bisa Anda bangun dengan koneksi E1 2 Mbps, Fiber Optic, koneksi Fast ethernet, dan banyak lagi. Jalan udara yang tidak berkelok-kelok dapat digunakan media wireless. Semua koneksi tersebut adalah pembuka jalur komunikasi ke dunia Internet.
Namun, sampai di sini cara kerja dunia Internet mulai berbeda dengan dunia nyata. Jalan-jalan yang di bentuk di dunia Internet harus terkoneksi ke kota-kota kecil, yaitu server-server remote access dan perangkat jaringan. Perangkat tersebut adanya di ISP, ibu kota dari penduduk tersebut. Dengan demikian, semua komunikasi yang terjadi antarpara penduduk di Internet harus melewati ibu kotanya dulu. Baik penduduk yang ada di satu kota maupun dengan penduduk yang ada di belahan Bumi lainnya.
Jika masih dalam satu kota, ISP tidak perlu melempar sesi komunikasi penduduknya keluar benua, karena jika masih satu daerah biasanya ada jalan singkat menuju ke situs lokal. Jalan singkat inilah yang sering kita kenal dengan istilah Internet Exchange.
Internet Exchange merupakan kumpulan dari seluruh ISP yang ada di sebuah daerah. Tujuannya adalah agar jalur komunikasi dalam sebuah geografis yang sama tidak perlu dilarikan ke luar benua Internet. Di Indonesia, Internet Exchange-nya adalah bernama Indonesia Internet Exchange (IIX).
Jalan singkat lain juga dapat terbentuk kalau sebuah ISP memiliki jalur pribadi khusus yang menghubungkannya dengan ISP lain. Jalur pribadi ini sering disebut dengan istilah Private peering. Jalur ini bagaikan jalan tol lintas provinsi yang dapat langsung menghubungkan penduduk di dalamnya tanpa harus berkelok-kelok lagi.

Bagaimana jika situs yang ingin dituju ternyata berada di benua Internet lain? Mau tidak mau ISP harus melempar sesi komunikasi tersebut ke benua Internet yang terdekat ke situs tersebut. Atau paling tidak ke NAP-NAP provider yang berada di atas ISP tersebut. Kemudian NAP provider-lah yang membangun jalur komunikasi antarbenua Internet lain dan mencarikan jalan terbaik menuju ke situs tujuan.
Untuk menuju ke sebuah situs tujuan tentu juga akan melewati benua-benua dan juga kota-kota lain di belahan dunia Internet lain. Begitu seterusnya sehingga dunia Internet terbentuk sedemikian besarnya saat ini. Jadi inti sebenarnya Internet adalah merupakan kumpulan dari jaringan-jaringan kecil yang dijadikan satu.
Untuk melayani penggunanya untuk berkomunikasi dengan situs atau pengguna yang berada di benua lain, ISP harus memiliki sebuah komponen penting, yaitu informasi rute menuju ke lokasi yang diinginkan penggunanya. ISP tempat Anda terkoneksi mutlak harus mengetahui jalur-jalur mana saja yang dapat digunakan untuk menyambungkan komunikasi para penggunanya. Jalan-jalan yang banyak terbentang di dunia Internet mau tidak mau harus dikumpulkan oleh ISP untuk kemudian disimpan atau disebarkan lagi ke
penggunanya.
Proses pengumpulan dan maintenance informasi rute inilah yang terpenting dalam proses terjadinya Internet. Terjadinya proses ini merupakan tugas utama dari sebuah routing protocol. Untuk menangani tugas ini, dunia Internet mempercayakan satu nama routing protocol, yaitu BGP.
Apakah BGP?
Border Gateway Protocol atau yang sering disingkat BGP merupakan salah satu jenis routing protocol yang ada di dunia komunikasi data. Sebagai sebuah routing protocol, BGP memiliki kemampuan melakukan pengumpulan rute, pertukaran rute dan menentukan rute terbaik menuju ke sebuah lokasi dalam jaringan. Routing protocol juga pasti dilengkapi dengan algoritma yang pintar dalam mencari jalan terbaik. Namun yang membedakan BGP dengan routing protocol lain seperti misalnya OSPF dan IS-IS ialah, BGP termasuk dalam kategori routing protocol jenis Exterior Gateway Protocol (EGP). Apa lagi itu EGP?
Sesuai dengan namanya, Exterior, routing protocol jenis ini memiliki kemampuan melakukan pertukaran rute dari dan ke luar jaringan lokal sebuah organisasi atau kelompok tertentu. Organisasi atau kelompok tertentu diluar organisasi pribadi sering disebut dengan istilah autonomous system (AS). Maksudnya rute-rute yang dimiliki oleh sebuah AS dapat juga dimiliki oleh AS lain yang berbeda kepentingan dan otoritas. Begitu juga dengan AS tersebut dapat memiliki rute-rute yang dipunya organisasi lain. Apa untungnya organisasi lain memiliki rute milik organisasi Anda dan sebaliknya?
Keuntungannya adalah organisasi Anda bisa dikenal oleh organisasi-organisasi lain yang Anda kirimi rute. Setelah dikenali rute-rute menuju lokasi Anda, banyak orang yang dapat berkomunikasi dengan Anda. Selain itu, Anda juga menerima rute-rute menuju ke organisasi lain, sehingga Anda juga dapat membangun komunikasi dengan para pengguna yang tergabung di organisasi lain. Dengan demikian, komunikasi dapat semakin luas menyebar.
BGP dikenal sebagai routing protocol yang sangat kompleks dan rumit karena kemampuannya yang luar biasa ini, yaitu melayani pertukaran rute antarorganisasi yang besar. Routing protocol ini memiliki tingkat skalabilitas yang tinggi karena beberapa organisasi besar dapat dilayaninya dalam melakukan pertukaran routing, sehingga luas sekali jangkauan BGP dalam melayani para pengguna jaringan.
Apa yang akan terjadi jika banyak organisasi di dunia ini yang saling berkumpul dan bertukar informasi routing? Yang akan dihasilkan dari kejadian ini adalah INTERNET. Maka dari itu, tidak salah jika BGP mendapat julukan sebagai inti dari eksisnya dunia Internet.
Apakah Autonomous System?
Analogi Autonomous System atau sering disingkat AS adalah bagaikan sebuah perusahaan tempat Anda bekerja. Sebuah perusahaan memiliki peraturannya sendiri, memiliki struktur organisasi sendiri, memiliki produknya sendiri, memiliki gayanya sendiri dalam berbisnis dan memiliki privasinya sendiri. Semua itu, tidak perlu diketahui oleh orang lain di luar perusahaan Anda, bukan?.
Namun, apa jadinya jika perusahaan tersebut menghasilkan sebuah produk yang harus dijual ke masyarakat? Tentu pertama-tama produk itu haruslah diketahui orang lain di luar perusahaan tersebut. Produk hasilnya diketahui orang lain bukan berarti seluruh isi perut perusahaan tersebut bisa diketahui oleh pihak lain, bukan? Kira-kira analogi Autonomous System dalam BGP sama seperti ini.
Jaringan internal sebuah organisasi bisa terdiri dari berpuluh-puluh bahkan ratusan perangkat jaringan dan server. Semuanya bertugas melayani kepentingan organisasi tersebut, sehingga otoritas dan kontrolnya hanya boleh diatur oleh organisasi tersebut. Cisco System, sebuah perusahaan pembuat perangkat jaringan mendefinisikan Autonomous System sebagai “Sekumpulan perangkat jaringan yang berada di bawah administrasi dan strategi routing yang sama”.
Autonomous System biasanya ditentukan dengan sistem penomoran. Sistem penomoran AS di dunia Internet diatur oleh organisasi Internet bernama IANA. Apa dan bagaimana sistem penomoran AS number ini akan dibahas di bawah nanti?

Apa Analogi untuk BGP?
Jika AS diumpamakan sebagai sebuah perusahaan, routing protocol BGP dapat diumpamakan sebagai divisi marketing dan promosi dalam sebuah perusahaan. Divisi marketing memiliki tugas menginformasikan dan memasarkan produk perusahaan tersebut. Divisi marketing memiliki tugas menyebarkan informasi seputar produk yang akan dijualnya. Dengan berbagai siasat dan algoritma di dalamnya, informasi tersebut disebarkan ke seluruh pihak yang menjadi target pasarnya. Tujuannya adalah agar mereka mengetahui apa produk tersebut dan di mana mereka bisa mendapatkannya.
Selain itu, divisi marketing juga memiliki tugas melakukan survai pasar yang menjadi target penjualan produknya. Para pembeli dan pengecer produk juga akan memberikan informasi seputar keinginan dan kebutuhan mereka terhadap produk yang dijual perusahaan tersebut. Divisi marketing juga perlu mengetahui bagaimana kondisi, prosepek, rute perjalanan, karakteristik tertentu dari suatu daerah target penjualannya. Jika semua informasi tersebut sudah diketahui, maka akan diolah menjadi sebuah strategi marketing yang hebat.
BGP memiliki tugas yang kurang lebih sama dengan divisi marketing dan promosi pada sebuah perusahaan. Tugas utama dari BGP adalah memberikan informasi tentang apa yang dimiliki oleh sebuah organisasi ke dunia di luar. Tujuannya adalah untuk memperkenalkan pada dunia luar alamat-alamat IP apa saja yang ada dalam jaringan tersebut. Setelah dikenal dari luar, server-server, perangkat jaringan, PC-PC dan perangkat komputer lainnya yang ada dalam jaringan tersebut juga dapat dijangkau dari dunia luar. Selain itu, informasi dari luar juga dikumpulkannya untuk keperluan organisasi tersebut berkomunikasi dengan dunia luar.
Dengan mengenal alamat-alamat IP yang ada di jaringan lain, maka para pengguna dalam jaringan Anda juga dapat menjangkau jaringan mereka. Sehingga terbukalah halaman web Yahoo, search engine Google, toko buku Amazon, dan banyak lagi.
Mengapa Menggunakan BGP?
BGP merupakan satu-satunya routing protocol yang dapat digunakan untuk menghubungkan dua organisasi besar yang berbeda kepentingan. Meskipun routing protocol jenis EGP bukan hanya BGP saja, namun tampaknya BGP sudah menjadi standar internasional untuk keperluan ini. Hal ini dikarenakan BGP memiliki fitur-fitur yang luar biasa banyak dan fleksibel.
Mulai dari pengaturan frekuensi routing update, sistem pembangunan hubungan dengan AS tetangga, sistem hello, policy-policy penyebaran informasi routing, dan banyak lagi fitur lain yang dapat Anda modifikasi dan utak-atik sendiri sesuai dengan selera. Maka dari itu BGP merupakan routing protocol yang dapat dikontrol sebebasbebasnya oleh pengguna. Dengan demikian, banyak sekali kebutuhan yang dapat terpenuhi dengan menggunakan BGP.
BGP juga sangat tepat jika sebuah perusahaan memiliki jalur menuju internet yang berjumlah lebih dari satu. Kondisi jaringan dimana memiliki jalur keluar lebih dari satu buah ini sering disebut dengan istilah multihoming. Jaringan multihoming pada umumnya adalah jaringan berskala sedang sampai besar seperti misalnya ISP, bank, perusahaan minyak multinasional, dan banyak lagi. Biasanya jaringan ini memiliki blok IP dan nomor AS sendiri.
Peranan BGP dalam jaringan multihoming ini sangat besar. Pertama, BGP akan berperan sebagai routing protocol yang melakukan pertukaran routing dengan ISP atau NAP yang berada di atas jaringan ini. Kedua, BGP dengan dipadukan oleh pengaturan policy-policynya yang sangat fleksibel dapat membuat sistem load balancing traffic yang keluar masuk. Bagaimana membuat sistem load balancing dengan menggunakan BGP akan dibahas pada artikel edisi berikutnya.
Selain itu, BGP juga merupakan routing protocol yang sangat reliable kerjanya. Hal ini dikarenakan BGP menggunakan protokol TCP untuk berkomunikasi dengan tetangganya
dalam melakukan pertukaran informasi. TCP merupakan protokol yang menganut sistem reliable service, di mana setiap sesi komunikasi yang dibangun berdasarkan protokol ini harus dipastikan sampai tidaknya.
Pemastian ini dilakukan menggunakan sistem Acknowledge terhadap setiap sesi komunikasi yang terjadi. Dengan demikian, hampir tidak ada informasi routing dari BGP yang tidak sampai ke perangkat tujuannya. Routing protocol BGP yang sekarang banyak
digunakan adalah BGP versi 4 atau lebih sering disingkat sebagai BGP-4.
Bagaimana Karakteristik BGP?
Kecanggihan dan kerumitan BGP sebenarnya dapat diperjelas intinya dengan beberapa karakteristik kunci. Berikut ini adalah karakteristik routing protokol BGP yang
menandakan ciri khasnya:
• BGP adalah Path Vector routing protocol yang dalam proses menentukan rute-rute terbaiknya selalu mengacu kepada path yang terbaik dan terpilih yang didapatnya dari router BGP yang lainnya.
• Routing table akan dikirim secara penuh pada awal dari sesi BGP, update selanjutnya hanya bersifat incremental atau menambahi dan mengurangi routing yang sudah ada saja.
• Router BGP membangun dan menjaga koneksi antar-peer menggunakan port TCP nomor 179.
• Koneksi antar-peer dijaga dengan menggunakan sinyal keepalive secara periodik.
• Kegagalan menemukan sinyal keepalive, routing update, atau sinyal-sinyal notifikasi lainnya pada sebuah router BGP dapat memicu perubahan status BGP peer dengan router lain, sehingga mungkin saja akan memicu update-update baru ke router yang lain.
• Metrik yang digunakan BGP untuk menentukan rute terbaik sangat kompleks dan dapat dimodifikasi dengan sangat fleksibel. Ini merupakan sumber kekuatan BGP yang sebenarnya. Metrik-metrik tersebut sering disebut dengan istilah Attribute.
• Penggunaan sistem pengalamatan hirarki dan kemampuannya untuk melakukan manipulasi aliran traffic membuat routing protokol BGP sangat skalabel untuk perkembangan jaringan dimasa mendatang.
• BGP memiliki routing table sendiri yang biasanya memuat informasi prefix-prefix routing yang diterimanya dari router BGP lain. Prefixprefix ini juga disertai dengan informasi atributnya yang dicantumkan secara spesifik di dalamnya.
• BGP memungkinkan Anda memanipulasi traffic menggunakan attribute-attributenya yang cukup banyak. Attribute ini memiliki tingkat prioritas untuk dijadikan sebagai
acuan.
Kapan Saatnya Tidak Menggunakan BGP?
Seperti dijelaskan di atas, BGP merupakan routing protocol yang kompleks dan sulit untuk di-maintain. Dengan demikian, penggunaannya diperlukan keahlian khusus dan juga perangkat router berkemampuan proses yang tinggi. Untuk itu, perencanaan yang baik sangat diperlukan untuk menggunakan BGP. Ada kalanya Anda tidak perlu menggunakan routing protocol ini dalam berhubungan dengan AS lain. Jangan gunakan BGP untuk jaringan dengan situasi seperti berikut ini:
• Hanya ada satu buah koneksi yang menuju ke Internet atau ke AS lain. Jaringan ini sering disebut dengan istilah singlehoming.
• Policy routing untuk ke Internet dan pemilihan jalur terbaik tidak terlalu diperlukan dalam sebuah AS.
• Perangkat router yang akan digunakan untuk menjalankan BGP tidak memiliki cukup memory dan tenaga processing untuk menangani update informasi dalam jumlah besar dan konstan.
• Keterbatasan pengetahuan dan kemampuan para administrator jaringannya dalam hal policy routing dan karakteristik BGP lainnya.
• Bandwidth yang kecil yang menghubungkan AS yang satu dengan lainnya.
Inti Internet yang Rumit
Terjadinya sebuah dunia bernama Internet memang sangat rumit. Bagaimana tidak pasalnya semua manusia yang ada di dunia ini ingin dapat dilayani permintaan komunikasinya, tentu sangat rumit, bukan? Kerumitannya ini terlihat juga pada routing protocol yang bertugas mengatur dan menciptakan komunikasi tersebut, yaitu BGP.
BGP memang sangat rumit, namun juga sangat bertenaga dalam melayani kebutuhan penduduk dunia akan internet. Karena kerumitan dan keunikannya inilah BGP begitu menarik untuk dipelajari. Namun untuk mempelajari lebih dalam lagi mungkin perlu training khusus dan pengalaman bertahun-tahun. Anda dapat mengetahui bagaimana dunia internet yang sebenarnya dari mempelajari BGP. Pada edisi selanjutnya akan dibahas bagaimana cara kerja BGP, atribut-atribut BGP, dan pernak-pernik lainnya. Selamat belajar!

http://www.pcmedia.co.id

Wednesday, June 13, 2007

Anatomy of the Linux kernel

Anatomy of the Linux kernel

History and architectural decomposition

The Linux® kernel is the core of a large and complex operating system, and while it's huge, it is well organized in terms of subsystems and layers. In this article, you explore the general structure of the Linux kernel and get to know its major subsystems and core interfaces. Where possible, you get links to other IBM articles to help you dig deeper.

Given that the goal of this article is to introduce you to the Linux kernel and explore its architecture and major components, let's start with a short tour of Linux kernel history, then look at the Linux kernel architecture from 30,000 feet, and, finally, examine its major subsystems. The Linux kernel is over six million lines of code, so this introduction is not exhaustive. Use the pointers to more content to dig in further.

A short tour of Linux history

Linux or GNU/Linux?
You've probably noticed that Linux as an operating system is referred to in some cases as "Linux" and in others as "GNU/Linux." The reason behind this is that Linux is the kernel of an operating system. The wide range of applications that make the operating system useful are the GNU software. For example, the windowing system, compiler, variety of shells, development tools, editors, utilities, and other applications exist outside of the kernel, many of which are GNU software. For this reason, many consider "GNU/Linux" a more appropriate name for the operating system, while "Linux" is appropriate when referring to just the kernel.

While Linux is arguably the most popular open source operating system, its history is actually quite short considering the timeline of operating systems. In the early days of computing, programmers developed on the bare hardware in the hardware's language. The lack of an operating system meant that only one application (and one user) could use the large and expensive device at a time. Early operating systems were developed in the 1950s to provide a simpler development experience. Examples include the General Motors Operating System (GMOS) developed for the IBM 701 and the FORTRAN Monitor System (FMS) developed by North American Aviation for the IBM 709.

In the 1960s, Massachusetts Institute of Technology (MIT) and a host of companies developed an experimental operating system called Multics (or Multiplexed Information and Computing Service) for the GE-645. One of the developers of this operating system, AT&T, dropped out of Multics and developed their own operating system in 1970 called Unics. Along with this operating system was the C language, for which C was developed and then rewritten to make operating system development portable.

Twenty years later, Andrew Tanenbaum created a microkernel version of UNIX®, called MINIX (for minimal UNIX), that ran on small personal computers. This open source operating system inspired Linus Torvalds' initial development of Linux in the early 1990s (see Figure 1).


Short history of major Linux kernel releases

Linux quickly evolved from a single-person project to a world-wide development project involving thousands of developers. One of the most important decisions for Linux was its adoption of the GNU General Public License (GPL). Under the GPL, the Linux kernel was protected from commercial exploitation, and it also benefited from the user-space development of the GNU project (of Richard Stallman, whose source dwarfs that of the Linux kernel). This allowed useful applications such as the GNU Compiler Collection (GCC) and various shell support.

Introduction to the Linux kernel

Now on to a high-altitude look at the GNU/Linux operating system architecture. You can think about an operating system from two levels, as shown in Figure 2.


The fundamental architecture of the GNU/Linux operating system
Methods for system call interface (SCI)
In reality, the architecture is not as clean as what is shown in Figure 2. For example, the mechanism by which system calls are handled (transitioning from the user space to the kernel space) can differ by architecture. Newer x86 central processing units (CPUs) that provide support for virtualization instructions are more efficient in this process than older x86 processors that use the traditional int 80h method.

At the top is the user, or application, space. This is where the user applications are executed. Below the user space is the kernel space. Here, the Linux kernel exists.

There is also the GNU C Library (glibc). This provides the system call interface that connects to the kernel and provides the mechanism to transition between the user-space application and the kernel. This is important because the kernel and user application occupy different protected address spaces. And while each user-space process occupies its own virtual address space, the kernel occupies a single address space. For more information, see the links in the Resources section.

The Linux kernel can be further divided into three gross levels. At the top is the system call interface, which implements the basic functions such as read and write. Below the system call interface is the kernel code, which can be more accurately defined as the architecture-independent kernel code. This code is common to all of the processor architectures supported by Linux. Below this is the architecture-dependent code, which forms what is more commonly called a BSP (Board Support Package). This code serves as the processor and platform-specific code for the given architecture.

Properties of the Linux kernel

When discussing architecture of a large and complex system, you can view the system from many perspectives. One goal of an architectural decomposition is to provide a way to better understand the source, and that's what we'll do here.

The Linux kernel implements a number of important architectural attributes. At a high level, and at lower levels, the kernel is layered into a number of distinct subsystems. Linux can also be considered monolithic because it lumps all of the basic services into the kernel. This differs from a microkernel architecture where the kernel provides basic services such as communication, I/O, and memory and process management, and more specific services are plugged in to the microkernel layer. Each has its own advantages, but I'll steer clear of that debate.

Over time, the Linux kernel has become efficient in terms of both memory and CPU usage, as well as extremely stable. But the most interesting aspect of Linux, given its size and complexity, is its portability. Linux can be compiled to run on a huge number of processors and platforms with different architectural constraints and needs. One example is the ability for Linux to run on a process with a memory management unit (MMU), as well as those that provide no MMU. The uClinux port of the Linux kernel provides for non-MMU support. See the Resources section for more details.



Major subsystems of the Linux kernel

Now let's look at some of the major components of the Linux kernel using the breakdown shown in Figure 3 as a guide.


One architectural perspective of the Linux kernel

System call interface

The SCI is a thin layer that provides the means to perform function calls from user space into the kernel. As discussed previously, this interface can be architecture dependent, even within the same processor family. The SCI is actually an interesting function-call multiplexing and demultiplexing service. You can find the SCI implementation in ./linux/kernel, as well as architecture-dependent portions in ./linux/arch. More details for this component are available in the Resources section.

Process management

What is a kernel?
As shown in Figure 3, a kernel is really nothing more than a resource manager. Whether the resource being managed is a process, memory, or hardware device, the kernel manages and arbitrates access to the resource between multiple competing users (both in the kernel and in user space).

Process management is focused on the execution of processes. In the kernel, these are called threads and represent an individual virtualization of the processor (thread code, data, stack, and CPU registers). In user space, the term process is typically used, though the Linux implementation does not separate the two concepts (processes and threads). The kernel provides an application program interface (API) through the SCI to create a new process (fork, exec, or Portable Operating System Interface [POSIX] functions), stop a process (kill, exit), and communicate and synchronize between them (signal, or POSIX mechanisms).

Also in process management is the need to share the CPU between the active threads. The kernel implements a novel scheduling algorithm that operates in constant time, regardless of the number of threads vying for the CPU. This is called the O(1) scheduler, denoting that the same amount of time is taken to schedule one thread as it is to schedule many. The O(1) scheduler also supports multiple processors (called Symmetric MultiProcessing, or SMP). You can find the process management sources in ./linux/kernel and architecture-dependent sources in ./linux/arch). You can learn more about this algorithm in the Resources section.

Memory management

Another important resource that's managed by the kernel is memory. For efficiency, given the way that the hardware manages virtual memory, memory is managed in what are called pages (4KB in size for most architectures). Linux includes the means to manage the available memory, as well as the hardware mechanisms for physical and virtual mappings.

But memory management is much more than managing 4KB buffers. Linux provides abstractions over 4KB buffers, such as the slab allocator. This memory management scheme uses 4KB buffers as its base, but then allocates structures from within, keeping track of which pages are full, partially used, and empty. This allows the scheme to dynamically grow and shrink based on the needs of the greater system.

Supporting multiple users of memory, there are times when the available memory can be exhausted. For this reason, pages can be moved out of memory and onto the disk. This process is called swapping because the pages are swapped from memory onto the hard disk. You can find the memory management sources in ./linux/mm.

Virtual file system

The virtual file system (VFS) is an interesting aspect of the Linux kernel because it provides a common interface abstraction for file systems. The VFS provides a switching layer between the SCI and the file systems supported by the kernel (see Figure 4).


The VFS provides a switching fabric between users and file systems

At the top of the VFS is a common API abstraction of functions such as open, close, read, and write. At the bottom of the VFS are the file system abstractions that define how the upper-layer functions are implemented. These are plug-ins for the given file system (of which over 50 exist). You can find the file system sources in ./linux/fs.

Below the file system layer is the buffer cache, which provides a common set of functions to the file system layer (independent of any particular file system). This caching layer optimizes access to the physical devices by keeping data around for a short time (or speculatively read ahead so that the data is available when needed). Below the buffer cache are the device drivers, which implement the interface for the particular physical device.

Network stack

The network stack, by design, follows a layered architecture modeled after the protocols themselves. Recall that the Internet Protocol (IP) is the core network layer protocol that sits below the transport protocol (most commonly the Transmission Control Protocol, or TCP). Above TCP is the sockets layer, which is invoked through the SCI.

The sockets layer is the standard API to the networking subsystem and provides a user interface to a variety of networking protocols. From raw frame access to IP protocol data units (PDUs) and up to TCP and the User Datagram Protocol (UDP), the sockets layer provides a standardized way to manage connections and move data between endpoints. You can find the networking sources in the kernel at ./linux/net.

Device drivers

The vast majority of the source code in the Linux kernel exists in device drivers that make a particular hardware device usable. The Linux source tree provides a drivers subdirectory that is further divided by the various devices that are supported, such as Bluetooth, I2C, serial, and so on. You can find the device driver sources in ./linux/drivers.

Architecture-dependent code

While much of Linux is independent of the architecture on which it runs, there are elements that must consider the architecture for normal operation and for efficiency. The ./linux/arch subdirectory defines the architecture-dependent portion of the kernel source contained in a number of subdirectories that are specific to the architecture (collectively forming the BSP). For a typical desktop, the i386 directory is used. Each architecture subdirectory contains a number of other subdirectories that focus on a particular aspect of the kernel, such as boot, kernel, memory management, and others. You can find the architecture-dependent code in ./linux/arch.



Interesting features of the Linux kernel

If the portability and efficiency of the Linux kernel weren't enough, it provides some other features that could not be classified in the previous decomposition.

Linux, being a production operating system and open source, is a great test bed for new protocols and advancements of those protocols. Linux supports a large number of networking protocols, including the typical TCP/IP, and also extension for high-speed networking (greater than 1 Gigabit Ethernet [GbE] and 10 GbE). Linux also supports protocols such as the Stream Control Transmission Protocol (SCTP), which provides many advanced features above TCP (as a replacement transport level protocol).

Linux is also a dynamic kernel, supporting the addition and removal of software components on the fly. These are called dynamically loadable kernel modules, and they can be inserted at boot when they're needed (when a particular device is found requiring the module) or at any time by the user.

A recent advancement of Linux is its use as an operating system for other operating systems (called a hypervisor). Recently, a modification to the kernel was made called the Kernel-based Virtual Machine (KVM). This modification enabled a new interface to user space that allows other operating systems to run above the KVM-enabled kernel. In addition to running another instance of Linux, Microsoft® Windows® can also be virtualized. The only constraint is that the underlying processor must support the new virtualization instructions. See the Resources section for more information.



Going further
Share this...

digg Digg this story
del.icio.us Post to del.icio.us
Slashdot Slashdot it!

This article just scratched the surface of the Linux kernel architecture and its features and capabilities. You can check out the Documentation directory that's provided in every Linux distribution for detailed information about the contents of the kernel. Be sure to check out the Resources section at the end of this article for more detailed information about many of the topics discussed here.



Resources

Learn
  • The GNU site describes the GNU GPL that covers the Linux kernel and most of the useful applications provided with it. Also described is a less restrictive form of the GPL called the Lesser GPL (LGPL).

  • UNIX, MINIX and Linux are covered in Wikipedia, along with a detailed family tree of the operating systems.

  • The GNU C Library, or glibc, is the implementation of the standard C library. It's used in the GNU/Linux operating system, as well as the GNU/Hurd microkernel operating system.

  • uClinux is a port of the Linux kernel that can execute on systems that lack an MMU. This allows the Linux kernel to run on very small embedded platforms, such as the Motorola DragonBall processor used in the PalmPilot Personal Digital Assistants (PDAs).

  • "Kernel command using Linux system calls" (developerWorks, March 2007) covers the SCI, which is an important layer in the Linux kernel, with user-space support from glibc that enables function calls between user space and the kernel.

  • "Inside the Linux scheduler" (developerWorks, June 2006) explores the new O(1) scheduler introduced in Linux 2.6 that is efficient, scales with a large number of processes (threads), and takes advantage of SMP systems.

  • "Access the Linux kernel using the /proc filesystem" (developerWorks, March 2006) looks at the /proc file system, which is a virtual file system that provides a novel way for user-space applications to communicate with the kernel. This article demonstrates /proc, as well as loadable kernel modules.

  • "Server clinic: Put virtual filesystems to work" (developerWorks, April 2003) delves into the VFS layer that allows Linux to support a variety of different file systems through a common interface. This same interface is also used for other types of devices, such as sockets.

  • "Inside the Linux boot process" (developerWorks, May 2006) examines the Linux boot process, which takes care of bringing up a Linux system and is the same basic process whether you're booting from a hard disk, floppy, USB memory stick, or over the network.

  • "Linux initial RAM disk (initrd) overview" (developerWorks, July 2006) inspects the initial RAM disk, which isolates the boot process from the physical medium from which it's booting.

  • "Better networking with SCTP" (developerWorks, February 2006) covers one of the most interesting networking protocols, Stream Control Transmission Protocol, which operates like TCP but adds a number of useful features such as messaging, multi-homing, and multi-streaming. Linux, like BSD, is a great operating system if you're interested in networking protocols.

  • "Anatomy of the Linux slab allocator" (developerWorks, May 2007) covers one of the most interesting aspects of memory management in Linux, the slab allocator. This mechanism originated in SunOS, but it's found a friendly home inside the Linux kernel.

  • "Virtual Linux" (developerWorks, December 2006) shows how Linux can take advantage of processors with virtualization capabilities.

  • "Linux and symmetric multiprocessing" (developerWorks, March 2007) discusses how Linux can also take advantage of processors that offer chip-level multiprocessing.

  • "Discover the Linux Kernel Virtual Machine" (developerWorks, April 2007) covers the recent introduction of virtualization into the kernel, which turns the Linux kernel into a hypervisor for other virtualized operating systems.

  • Check out Tim's book GNU/Linux Application Programming for more information on programming Linux in user space.

  • In the developerWorks Linux zone, find more resources for Linux developers, including Linux tutorials, as well as our readers' favorite Linux articles and tutorials over the last month.

  • Stay current with developerWorks technical events and Webcasts.

Get products and technologies
  • Order the SEK for Linux, a two-DVD set containing the latest IBM trial software for Linux from DB2®, Lotus®, Rational®, Tivoli®, and WebSphere®.

  • With IBM trial software, available for download directly from developerWorks, build your next development project on Linux.


Discuss


About the author

M. Tim Jones

M. Tim Jones is an embedded software engineer and the author of GNU/Linux Application Programming, AI Application Programming (now in its second edition), and BSD Sockets Programming from a Multilanguage Perspective. His engineering background ranges from the development of kernels for geosynchronous spacecraft to embedded systems architecture and networking protocols development. Tim is a Consultant Engineer for Emulex Corp. in Longmont, Colorado.

Thursday, June 7, 2007

Installing FreeBSD

Installing FreeBSD

Applicable to: FreeBSD 6.x (i386)

This Sheet describes the procedure for installing FreeBSD. Before performing this procedure, you should review the FreeBSD Handbook article Installing FreeBSD.

  1. Inventory your computer hardware and ensure that it is compatibile with FreeBSD. The current compatibility list can be found in the FreeBSD/i386 Hardware Notes.
  2. Click here to view Luna's hardware configuration
    Click here to view Pandora's hardware configuration
    Click here to view Sentinel's hardware configuration

  3. Insert FreeBSD CD #1 in the CD drive and turn on the computer.
  4. You may need to go into the computer's system configuration and enable the CD drive as a boot device, or change the boot order so that the computer boots to the CD first.

    If your computer cannot boot from the CD drive, follow the instructions listed in the FreeBSD Installation Instructions for creating boot floppies.

  5. If you are using a USB keyboard, choose the 'Boot FreeBSD with USB keyboard' option at the boot menu. (If you don't, your system will be non-responsive. Trust me...)
  6. Note: If you are installing FreeBSD 5.x with a USB keyboard, choose the 'Escape to loader prompt' option at the boot menu, then enter the following commands:

    OK set hint.atkbd.0.flags="0x1"
    OK boot

  7. If you wish to set up two hard drives as a RAID-1 mirroring drive system, perform the following:
    1. From the main menu, choose 'Fixit' to get a shell prompt.
    2. Determine which devices are your hard drives:
    3. # atacontrol list

      You should see something similar to:

      ...
      ATA channel 2:
      Master: ad4 Serial ATA v1.0
      ...
      ATA channel 4:
      Master: ad8 Serial ATA v1.0
      ...

      In this example, the two drives which will be mirrored are ad4 and ad8.

    4. Create the mirror array:
    5. # atacontrol create RAID1 ad4 ad8

    6. After the array has been created, you can check the status using atacontrol:
    7. # atacontrol status ar0

      The response should be:

      ar0: ATA RAID1 subdisks: ad4 ad8 status: READY

    8. To return to the Main Menu, enter:
    9. # exit

      At the main menu, choose 'Exit Install' to reboot the computer. After the computer reboots, the array device ar0 will be available for installing FreeBSD.

  8. From the main menu, choose the 'Standard' installation.
  9. In the FDISK Partition Editor, choose 'A' to use the entire disk. Choose 'S' to make this partition the boot partition. Press 'Q' to continue.
  10. At the "Install Boot Manager" prompt, choose the appropriate boot manager. This procedure assumes that FreeBSD is the only operating system, so choose the 'Standard' master boot record.
  11. In the Disklabel Editor, create the following partitions:
    ar0s1a   /      512MB as UFS2
    ar0s1b swap 2048MB as swap (4x system RAM)
    ar0s1d /var 4096MB as UFS2 + Softupdates
    ar0s1e /usr remaining as UFS2 + Softupdates
  12. Choose 'Q' to continue.

  13. Choose Distributions:
    • Developer
    • Ports
    • Custom Distributions: Games

    Choose 'OK' to go to next menu.

  14. Choose installation media. In this case CD/DVD.
  15. At the 'Last Chance' warning, choose "YES."

(At this point the System will install...)

  1. You will be prompted for several miscellaneous configuration options:
    1. Ethernet device 'bge0':
      • IPv6 Config: No
      • DHCP: No
      • Host: machine_name.your_domain.tld
      • Domain: your_domain.tld
      • IP Address: 10.70.153.1
    2. Warning: If your network card is not included in the generic kernel, do not bring up the interface!
    3. Gateway: No
    4. inetd: Yes
    5. ssh: Yes (there is some follow-up in Post-Install Cleanup)
    6. Anonymous FTP: No
    7. NFS Server: No
    8. NFS Client: No
    9. Customize console: Fast repeat rate
    10. Time Zone: Local, not GMT. (set to your time zone)
    11. Linux Binary support: No
    12. Mouse Configuration: No (or set to your mouse, if you're using one)
    13. Packages: No
    14. Additional users: No (Add users after Post-Install Cleanup)
    15. Set 'root' password: ******
  2. Exit install.

(System reboots...)