본문 바로가기

학교/os

(8)
파일 시스템 들어가기 전에 학교 수업 때 배운걸 다시 정리해서 쓴 글입니다. 오타 및 잘못된 부분 지적은 언제나 환영입니다! 파일 시스템이란? 파일이 디스크에 관리될 수 있도록 해주는 자료구조들의 집합 디스크에서 파일 시스템 구성 디스크의 연속된 블록 공간을 할당 받아, 그곳에 파일들의 메타 데이터들을 저장한다. 이 파일의 메타데이터 집합을 Inode라 하고, 이 Inode가 담긴 블록을 Inode 블록이라 한다. Inode 블록 포함 파일 시스템과 관련한 블록을 제외한 나머지 블록은 데이터 블록이다. 디스크 내에 32개의 블록이 있을 때 각 요소들을 대략적으로 표현하면 다음과 같다. inode(index node) unix기반 시스템에서 파일에 대한 메타 데이터들의 집합. 고유한 숫자로 이루어졌으며, 파일 시스템에..
스레드 들어가기 전에 학교 수업 때 배운걸 다시 정리해서 쓴 글입니다. 오타 및 잘못된 부분 지적은 언제나 환영입니다! 프로세스도 포함되는 내용들이 있지만, 이 글에서는 스레드를 기준으로 작성했습니다. 원자적 : 실패 또는 성공만 있고 일부만 성공은 허용하지 않음 스레드란? 프로세스 내부 상태를 가지고 독립적으로 실행 가능한 작업 단위 독립적으로 실행되며, 여러 루틴들을 호출할 수 있기 때문에 각 스레드마다 스택 주소 공간을 가지고있다. 이 부분에 대해선 사람마다 정의가 다르고 표현도 모호하기 때문에 여러 글을 참고하는걸 추천한다. 스레드와 프로세스의 차이? cs 대비할 때 꼭 나오는 질문이다. 쉽게 말하면 스레드끼리는 힙을 공유하고, 프로세스끼리는 공유하지 않는다. c 같은 경우 전역 변수나 이런 걸로도 스레..
주소 변환 들어가기 전에 학교 수업 때 배운걸 다시 정리해서 쓴 글입니다. 오타 및 잘못된 부분 지적은 언제나 환영입니다! 주소체계는 8bit, 페이지 테이블 항목(Page Table Entry)는 4byte로 예시를 만들었습니다. 주소 변환이 필요한 이유 프로세스가 메모리에 할당되는 과정에서 연속된 공간을 할당받지 못하거나 문맥 교환을 통해 이전과는 다른 메모리 공간을 할당받을 수 있다. 이런 상황에서도 프로세스의 논리적 주소를 기반으로 물리 메모리에 매칭시키게 해야 한다. 이렇게 주소 변환 기법을 통해 프로세스는 물리 메모리에 자신만의 독립된 공간이 있다는 환상을 가진다. 메모리 관련 용어 동적 로딩 : 프로세스를 실행할 땐, 모든 정보가 메모리에 올라가지 않고, 필요한 부분만 올라가게 하는 기법\ 동적 링킹 ..
문맥 교환(context switching) 들어가기 전에 학교 수업 때 배운걸 다시 정리해서 쓴 글입니다. 오타 및 잘못된 부분 지적은 언제나 환영입니다! 프로세스의 3가지 상태 running : CPU 자원을 할당받아 실행중인 프로세스 ready: CPU 자원을 받는다면 바로 실행 가능한 프로세스 block : CPU 자원을 받아도 실행이 불가능한 상태 ex) I/O 작업 완료 대기 이 외에도 디스크에서 swap 대기와 swap 불가 상태가 있지만 크게 3가지로 본다. 프로세스의 문맥 교환 조건 Timer 인터럽트 발생 cpu에선 일정 주기마다 실행 중인 프로세스의 자원을 회수하고 ready 상태의 다른 프로세스에게 할당한다. 자원이 회수된 프로세스는 ready 상태가 된다. I/O 인터럽트 발생 I/O 연산같이 느린 연산의 경우, 작업이 완료..
프로세스의 생성과 통신 들어가기 전에 학교 수업 때 배운걸 다시 정리해서 쓴 글입니다. 오타 및 잘못된 부분 지적은 언제나 환영입니다! 프로세스의 생성 최초의 프로세스는 OS가 생성하고 그 이후는 다른 프로세스가 프로세스를 생성하게 된다. 보통 이 프로세스 생성 관계를 부모/자식 관계로 비유한다. 리눅스에선 이 관계를 트리 형태로 보여준다. OS가 생성한 init 프로세스를 최초로 생성하고 그 이후는 init 프로세스에서 파생된다. 이렇게 부모-자식 관계가 형성되는 목적은 2가지이다. 1. 부모와 자식 프로세스가 같이 수행되기 위해 이 경우, 부모와 다른 자원공간을 할당받을 수 있고, 부모와 자원을 공유해 사용할 수 있다. 부모와 자식이 CPU 자원을 두고 경쟁하게 된다. 2. 다른 프로그램이 실행된 결과를 기다려야 할 때 부..
프로세스 구조 들어가기 전에 학교 수업 때 배운걸 다시 정리해서 쓴 글입니다. 오타 및 잘못된 부분 지적은 언제나 환영입니다! 주소 공간의 분리 프로세스 내부엔 각자의 역할끼리 모여있다. 이 역할은 메모리에 적재될 때 크게 3가지 영역으로 분리된다. code : 코드를 실행 가능한 기계어 형태로 변환한 곳 이 부분이 변환되면 안 되기 때문에 읽기 전용이다. data : 전역 변수와 정적 변수등 프로그램에서 사용되는 변수를 저장하는 부분. 변수는 런타임 중에도 바뀔 수 있기 때문에 일부 데이터는 쓰기가 된다. stack : 함수가 호출되고 종료될 떄 사용되는 공간, 함수 선언에 필요한 매개변수나 복귀 주소를 담는다. 이 외에도, 초기화 되지 않은 변수 영역인 bss 영역이나 동적 할당 공간인 heap도 있지만 mallo..
DMA(Direct Memory Access) 들어가기 전에 학교 수업 때 배운걸 다시 정리해서 쓴 글입니다. 오타 및 잘못된 부분 지적은 언제나 환영입니다! I/O 요청이 발생했을 때 DMA대해 설명하기 전 I/O 요청이 일어날 때의 처리 과정을 알아야 한다. 아래 그림은 디스크에서 데이터를 가져올 때이다. 우리가 사용하는 컴퓨터는 여러 장치들과 연결돼있다. 컴퓨터에도 CPU가 있고, 연결된 장치들에도 CPU가 있다. (교수님은 메인 CPU를 엄마 CPU, 장치들의 CPU를 새끼 CPU라고 비유하셨다.) 메인 CPU가 각 장치들이 작업을 완료할 때 까지 기다리는 것은 매우 많은 시간이 들기 때문에 장치의 CPU에게 I/O작업을 맡기고, 작업이 완료될 때 까지 다른 프로세스의 일을 처리한다. 장치 내부의 로컬 버퍼에 데이터가 준비 되면 장치는 메인 ..
커널(Kernel) 들어가기 전에 학교 수업 때 배운걸 다시 정리해서 쓴 글입니다. 오타 및 잘못된 부분 지적은 언제나 환영입니다! 커널에 대해 대략적인 부분만 다루기 때문에 세부 내용들에 대해선 다루지 않습니다 커널이란? 운영체제에서 가장 핵심적인 부분 운영체제는 하드웨어와 소프트웨어 사이에 위치에 하드웨어의 자원 접근을 대신 관리해주고, 소프트웨어 최적의 상태로 실행 될 수 있도록 지원한다. 그만큼 운영체제는 많은 기능들이 있지만, 이를 모두 메모리에 올리는 것은 낭비다. 따라서, 핵심 기능만 메모리에 올리게 됐는데 이 기능들을 통틀어 커널이라 한다. 커널 모드 사용자가 하드웨어에 직접 접근을 하는 것은 치명적인 결과를 가져올 수 있다. 우리가 사용하는 유저 모드에서 하드웨어 자원에 접근하기 위에선 운영체제에 맡겨야 한..