How “ printf ()” is working?

7
How “printf()” is working? Jungsik Yoon NML. GIST 2009. 11. 25

description

How “ printf ()” is working?. Jungsik Yoon NML. GIST 2009. 11. 25. 디바이 스 드라이버. 응용프로그 램. 응용프로그 램. 디바이스 드라이버. 인터페이스. 하드웨어. 디바이스 드라이버. 하드웨어. 초기 운영 체제. 인터페이스가 추가된 OS 구조. 리눅스 디바이스 드라이버 구성. 응용프로그 램. User Space. 시스템 호출 인터페이 스. Kernel Space. 가상 파일 시스템 (VFS). 버퍼 캐시. 네트워크 시스템. - PowerPoint PPT Presentation

Transcript of How “ printf ()” is working?

Page 1: How “ printf ()” is working?

How “printf()” is working?

Jungsik YoonNML. GIST

2009. 11. 25

Page 2: How “ printf ()” is working?

디바이스 드라이버

응용프로그램

디바이스 드라이버

하드웨어

초기 운영 체제

응용프로그램

인터페이스

디바이스 드라이버

하드웨어

인터페이스가 추가된 OS 구조

Page 3: How “ printf ()” is working?

리눅스 디바이스 드라이버 구성User

Space

Kernel Space

Hardware

응용프로그램

시스템 호출 인터페이스

가상 파일 시스템 (VFS)

버퍼 캐시 네트워크 시스템

문자 디바이스 드라이버

블록 디바이스드라이버

네트워크 디바이스드라이버

하드웨어

Page 4: How “ printf ()” is working?

함수의 호출 관계

open( )close( )read( )write( )

응용 프로그램

sys_open( )

sys_close( )

sys_read( )

sys_write( )

시스템 호출

owneropenclosereadwriteioctllock

가상 파일 시스템<linux/fs.h>

dev_open( )

dev_close( )

dev_read( )

dev_write( )

디바이스 드라이버

Page 5: How “ printf ()” is working?

응용프로그램 시스템 콜 인터페이스• 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 을 발생 시킴 .

Page 6: How “ printf ()” is working?

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 에 지정되어 있음 .

Page 7: How “ printf ()” is working?

응용프로그램

시스템 호출

가상 파일 시스템 (VFS)

버퍼 캐시 네트워크 시스템

문자 디바이스 드라이버

블록 디바이스드라이버

네트워크 디바이스드라이버

하드웨어