Selasa, 09 April 2019



Layanan langsung sistem operasi ke pemrograman, disebut dengan system call. System call adalah tata cara pemanggilan di program aplikasi untuk memperoleh layanan yang disediakan oleh sistem operasi(kernel). System call berupa rutin sistem operasi untuk keperluan tertentu yang spesifik.

   System Call untuk manajemen proses diperlukan untuk mengatur proses-proses yang sedang berjalan. Kita dapat melihat penggunaan system calls untuk manajemen proses pada Sistem Operasi Unix. Contoh yang paling baik untuk melihat bagaimana system call bekerja untuk manajemen proses adalah Fork.

 Keuntungan dan kerugian menggunakan system call sama antarmuka untuk memanipulasi baik file dan perangkat adalah Setiap perangkat dapat diakses seolah-olah itu adalah file dalam file sistem. Karena sebagian besar penawaran kernel dengan perangkat melalui antarmuka file, relatif mudah untuk menambahkan device driver baru dengan menerapkan kode perangkat keras khusus untuk mendukung antarmuka file abstrak.

   Oleh karena itu, ini manfaat pengembangan baik kode program pengguna, yang dapat bewritten untuk mengakses perangkat dan file dalam samemanner, dan perangkat sopir kode, yang dapat ditulis untuk mendukung API yang didefinisikan dengan baik. Kerugian itu dengan menggunakan antarmuka yang sama adalah bahwa mungkin akan sulit untuk menangkap fungsi peralatan tertentu dalam konteks akses file API, sehingga baik mengakibatkan hilangnya fungsi atau kerugian kinerja. Beberapa ini dapat diatasi dengan penggunaan operasi ioctl yang menyediakan antarmuka tujuan umum untuk proses untuk memanggil operasi pada perangkat.

Ada lima jenis system calls utama, yaitu:

a. Process control merupakan system calls yang mengendalikan proses-proses yang berjalan.
    *load
    *execute
    *create process
    *terminate process
    *get/set process attributes
    *wait for time, wait event, signal event
    *allocate, free memory
b. File manipulation adalah kumpulan system calls yang bertugas untuk melakukan manipulasi file seperti pembacaan, penulisan, penghapusan dan pengubahan.
    *create file, delete file
    *open, close
    *read, write, reposition
    *get/set file attributes
c. Device manipulation adalah system calls yang mengatur penggunaan peralatan-peralatan yang terhubung pada mesin tersebut.
    *request device, release device
    *read, write, reposition
    *get/set device attributes
    *logically attach or detach devices
d. Information maintenance. System calls yang menghubungkan user dengan sistem operasi dalam hal berbagi informasi.
    *get/set time or date
    *get/set system data
    *get/set process, file, or device attributes
e. Communications. Ada dua model komunikasi yaitu pertukaran informasi dilakukan melalui fasilitas komunikasi antar proses yang disediakan oleh sistem operasi (Message-Passing) dan pertukaran dengan menggunakan memori (shared-memory).
    *create, delete communication connection
    *send, receive messages
    *transfer status information
    *attach or detach remote device


Bentuk system call beragam, terbanyak berupa rutin prosedur atau fungsi.

Dibawah ini saya akan mencaoba menambahkan systemcall dengan nama mysyscall yang berguna untuk menampilkan local time dengan mengabaikan parameter zona watu.

Menambahkan system call
1.    Download kernel linux versi 2.6.32, nama file: linux-2.6.32.tar.gz
2.    Copy download ke direktori /usr/src
3.    Masuk direktori /usr/src
cd /usr/src
4.    Extract archive linux-2.6.32 pada direktori /usr/src
sudo tar zxf linux-2.6.32.tar.gz
5.    Kita akan membuat system call dengan nama fungsi mysyscall, untuk itu buat folder mysyscall pada /usr/src/linux-2.6.32:
sudo mkdir /usr/src/linux-2.6.32/mysyscall
6. Cari file /usr/src/linux-2.6.32/arch/x86/kernel/syscall_table_32.S, dan buka
sudo gedit /usr/src/linux-2.6.32/arch/x86/kernel/syscall_table_32.S
tambahkan pada akhir file:
.long sys_mysyscall
7.    Cari file /usr/src/linux-2.6.32/arch/x86/include/asm/unistd_32.h, dan buka
sudo gedit /usr/src/linux-2.6.32/arch/x86/include/asm/unistd_32.h
tambahkan:
#define __NR_mysyscall 337
setelah baris:
#define __NR_perf_event_open 336
8.    Cari file /usr/src/linux-2.6.32/include/linux/syscalls.h , dan buka
sudo gedit /usr/src/linux-2.6.32/include/linux/syscalls.h
tambahkan:
asmlinkage int sys_mysyscall(struct timeval *current_time);
setelah baris 881
9. Cari file /usr/src/linux-2.6.32/Makefile, dan buka
sudo gedit /usr/src/linux-2.6.32/Makefile
cari baris dengan text “core-y                 +=” (jarak antara ‘y’ dan ‘+’ 2 tab), dan sunting menjadi:
core-y      += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ mysyscall/
10. Buat file mysyscall.c pada direktori /usr/src/linux-2.6.32/mysyscall:
sudo gedit /usr/src/linux-2.6.32/mysyscall/mysyscall.c
isikan source code system call baru yang akan ditambahkan sebagai berikut:
/* file mysyscall.c */#include <linux/linkage.h>#include <linux/unistd.h>
#include <linux/time.h>
#include <linux/kernel.h>
asmlinkage int sys_mysyscall(struct timeval *current_time) {
/** tulis kode system call baru Anda di sini **/
if (current_time != NULL) {
/* sudah dialokasi */
do_gettimeofday(current_time);
}else{
/* current_time belum dialokasi */
return 0;
}
/* berhasil mendapatkan system time */
return 1;
}
11. Buat file Makefile pada direktori /usr/src/linux-2.6.32/mysyscall:
sudo gedit /usr/src/linux-2.6.32/mysyscall/Makefile
isikan sebagai berikut:
obj-y := mysyscall.o
12. Anda telah berhasil menambahkan system call pada kernel linux, Selamat Gan!!! Lanjut ke mengkompilasi kernel agar bisa dipakai system call anda yang buat
Mengkompilasi kernel
1.    Untuk mengkompilasi kernel, sebelumnya tambahkan program berikut ini, bisa lewat Synaptic Package Manager atau lewat sudo apt-get install
kernel-package libncurses5-devfakeroot
kernel-wedge
build-essential
libncurses5
makedumpfile
2.    Setelah menambahkan program-program diatas pada linux Anda, sekarang ayo memulai kompile kernel. Masuk direktori /usr/src/linux-2.6.32:
cd /usr/src/linux-2.6.32
3.    Sekarang konfigurasi kernel, samakan konfigurasi dengan konfigurasi kernel anda saat ini:
sudo make oldconfig
4.    Supaya dalam mengkompilasi kernel, yang dikompilasi hanya modul yang dibutuhkan system anda:
sudo make localmodconfig
5.    Untuk konfigurasi lebih lanjut (tapi repot mending gak usah):
sudo make menuconfig
6.    Untuk membuat clean build:
sudo make-kpkg clean
7.    Kompile semua source code:
sudo make all
8.    Setelah selesai kompilasi (nunggu lama), masukkan:
sudo fakeroot make-kpkg –initrd –append-to-version=-custom kernel-image kernel-headers
9.    Kompilasi sudah berhasil. Sekarang masuk direktori /usr/src
cd /usr/src
10. Instalasi kernel:
sudo dpkg -i linux-image-2.6.32-custom_2.6.32-custom-10.00.Custom_i386.debsudo dpkg -i linux-headers-2.6.32-custom_2.6.32-custom-10.00.Custom_i386.deb
11. Masuk direktori /boot:
cd /boot
12. Buat initrd image
sudo mkinitramfs -k -o initrd.img-2.6.32-custom 2.6.32-custom
13. Update grub, supaya kernel yang baru muncul pada boot
sudo update-grub
14. Instalasi selesai sekaran restart dan coba boot dengan kernel yang baru yaitu “Ubuntu, Linux 2.6.32-custom”
Untuk mencoba menjalankan system call yang baru anda dapat membuat program kecil seperti dibawah ini:
/* file: c.h */#include <linux/unistd.h>#define __NR_mysyscall 337
int mysyscall(struct timeval *tv)
{
return syscall(__NR_mysyscall,tv);
}
/* file c.c */
#include <sys/time.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include “c.h”
int main(void)
{
struct timeval current_time;
struct tm * timeinfo;
int output=mysyscall(&current_time);
if(output){
/* Jika berhasil */
timeinfo = localtime ( &current_time.tv_sec );
printf(“System time: %s”,asctime (timeinfo));
printf(“Microsecond: %ld\n”,(long)current_time.tv_usec);
}else{
/* Jika gagal */
printf(“gagal mengambil system time\n”);
}
return 0;
}


Sumber :
http://anis99mi.blogspot.com/2015/01/sistem-call-pada-sistem-operasi.html
https://selaluwanien.wordpress.com/2011/10/18/shell-linux-dan-system-call-linux/

0 komentar:

Posting Komentar

Popular Posts

renny wahyu. Diberdayakan oleh Blogger.

Contact Us

Nama

Email *

Pesan *

Total Pageviews

Pages