시스템 프로그래밍의 기반 요소 * 시스템 콜 (system call) * C 라이브러리 * C 컴파일러 시스템 콜 * 시스템 콜 : 운영체제 리소스나 서비스 요청을 위해, 사용자 영역에서 커널 영역으로 들어가는 함수 * 주요 시스템콜 : read(), write(), open() 등 * 리눅스 / 유직스는 C 언어로 만들어져있으므로, 시스템콜도 C언어로 구현되어 있다 시스템 콜은 어떻게 구현? * eax 레지스터에 시스템 콜 번호를 넣는다 * ebx 레지스터에는 시스템 콜에 해당하는 인자값을 넣는다 * 소프트웨어 인터럽트 명령을 호출하면서 0x80값을 넘겨준다 1. CPU는 사용자 모드를 커널 모드로 바꿔준다 2. IDT (Interrupt Descrpitor Table)에서 0x80에 해당하는 주소(함..
리눅스와 파일 정리 * 모든 것은 파일이라는 철학을 따름 - 모든 인터렉션은 파일을 읽고, 쓰는 것처럼 이루어져 있음 - 마우스, 키보드와 같은 모든 디바이스 관련된 기술도 파일과 같이 다루어짐 - 모든 자원에 대한 추상화 인터페이스로 파일 인터페이스를 활용 가상 파일 시스템 * 파일 네임스페이스 - A 드라이브 (A:/), C 드라이브 (C:/windows) (X) - 전역 네임스페이스 사용 /media/floofy/dave.jpg 예: cat tty 슈퍼블록, inode와 파일 * 슈퍼블록 : 파일 시스템의 정보 * 파일 : inode 고유값과 자료구조에 의해 주요 정보 관리 - '파일이름:inode'로 파일이름은 inode 번호와 매칭 - 파일 시스템에서는 inode를 기반으로 파일 엑세스 - in..
프로세스 VS 바이너리 * 코드 이미지 또는 바이너리 : 실행파일 * 실행 중인 프로그램 : 프로세스 - 가상 메모리 및 물리 메모리 정보 - 시스템 리소스 관련 정보 - 스케쥴링 단위 리눅스는 다양한 프로세스 실행 환경 * 리눅스는 기본적으로 다양한 프로세스가 실행됨 - 유닉스 철학 : 여러 프로그램이 서로 유기적으로 각자의 일을 수행하면서 전체 시스템이 동작하도록 하는 모델 foreground process / background process * foreground process : 쉘(shell)에서 해당 프로세스 실행을 명령한 후, 해당 프로세스 수행 종류까지 사용자가 다른 입력을 하지 못하는 프로세스 * background process : 사용자 입력과 상관이 실행되는 프로세스 - 쉘(she..
Standard Stream (표준 입출력) * command로 실행되는 세 가지 스트림을 가지고 있음 - 표준 입력 스트림 (Standard Input Stream) - stdin - 표준 출력 스트림 (Standard Output Stream) - stdout - 오류 출력 스트림 (Standard Error Stream) - stderr * 모든 스트림은 일반적인 plain text로 console에 출력하도록 되어 있음 리다이렉션 (redirection) * 표준 스트림 흐름을 바꿔줄 수 있다 - >, files.txt - ls 로 출력되는 표준 출력 스트림의 방향을 fi..