프로그램, 프로세스, 스레드 * 프로그램 : 바이너리, 코드 이미지, 응용 프로그램, Application, 또는 실행 파일 * 프로세스 : 실행 중인 프로그램 (메모리 적재 + 프로세스 상태 정보 포함) * 스레드 - 리눅스 프로세스는 기본 스레드 포함 - 싱글스레드 프로세스 : 기본 프로세스 - 멀티스레드 프로세스 : 여러 스레드 존재 프로세스 ID * pid(process id), 각 프로세스는 해당 시점에 unique한 pid를 가짐 * pid 최대 값은 32768 * 부호형(signed) 16비트 정수값 사용 * 최근 할당된 pid가 200이라면, 그 이후는 201, 202… 식으로 할당된다 프로세스 계층 * 최초 프로세스 : init 프로세스, pid 1 * init 프로세스는 운영체제가 생성..
시스템 프로그래밍의 기반 요소 * 시스템 콜 (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..