How “ printf ()” is working?
-
Upload
kirby-fletcher -
Category
Documents
-
view
34 -
download
4
description
Transcript of How “ printf ()” is working?
How “printf()” is working?
Jungsik YoonNML. GIST
2009. 11. 25
디바이스 드라이버
응용프로그램
디바이스 드라이버
하드웨어
초기 운영 체제
응용프로그램
인터페이스
디바이스 드라이버
하드웨어
인터페이스가 추가된 OS 구조
리눅스 디바이스 드라이버 구성User
Space
Kernel Space
Hardware
응용프로그램
시스템 호출 인터페이스
가상 파일 시스템 (VFS)
버퍼 캐시 네트워크 시스템
문자 디바이스 드라이버
블록 디바이스드라이버
네트워크 디바이스드라이버
하드웨어
함수의 호출 관계
open( )close( )read( )write( )
응용 프로그램
sys_open( )
sys_close( )
sys_read( )
sys_write( )
시스템 호출
owneropenclosereadwriteioctllock
가상 파일 시스템<linux/fs.h>
dev_open( )
dev_close( )
dev_read( )
dev_write( )
디바이스 드라이버
응용프로그램 시스템 콜 인터페이스• C 코드
#include <unistd.h>int main (void){
write(1, “Hello, world\n”, 14);return 0;
}
표준 출력 (stdout)
로우레벨 출력 함수인 sys_write( ) 호출
문자열 길이
• write() 함수는 저수준 출력함수이므로 printf() 에 비해서 사용하기 불편하지만 , 기능이 단순해서 생성되는 코드가 단순해서 이해하기 쉬움
• 첫 번째 인자는 출력할 핸들을 의미0 – 표준 입력 (stdin)1 - 표준 출력 (stdout)2 – 표준 에러 (stderr)
• write( ) 는 EAX, EBX, ECX, EDX 등의 레지스터에 각 인자를 차례대로 저장한 뒤 , 시스템 콜을 위해 인터럽트 0x80 을 발생 시킴 .
con’t
• EAX 에 지정된 값으로 시스템 콜 인터페이스가 호출 되며 , 이 경우 sys_write( ) 시스템 호출 번호인 4 가 EAX 에 저장 .
• system_call( ) 함수는 sys_call_table 을 참조해서 4번째에 해당하는 sys_write( ) 를 호출 .* sys_call_table 은 2.6 커널의 경우 , arch/i386/kernel/syscall_table.S 에 지정되어 있음 .
응용프로그램
시스템 호출
가상 파일 시스템 (VFS)
버퍼 캐시 네트워크 시스템
문자 디바이스 드라이버
블록 디바이스드라이버
네트워크 디바이스드라이버
하드웨어