CS/운영체제

    sync, async, blocking, non-blocking

    서론 얼마 전에 면접에서 이 개념들을 섞어서 대답하는 바람에... ㅠㅠ 이번에 확실히 정리하고자 글을 쓴다. blocking, non-blocking 이 두 개의 개념은 어떤 한 함수가 어떻게 동작하는지에 관한 이야기다. 함수 A와 B가 존재한다고 하자. 그리고 함수 A가 코드 안에서 함수 B를 호출한다. 이 때 함수 A가 어떻게 행동할지에 따라서 blocking과 non-blocking이 결정된다. 함수 B에는 관심이 없다. 여기서 함수 A의 동작에만 초점을 맞춰보자. blocking에서 함수 A는 다른 행동을 하지 않고 함수 B의 결과를 기다린다. 그러면 함수 A와 함수 B는 싱글 프로세스, 싱글 쓰레드, 멀티 프로세스, 멀티 쓰레드 중에 무엇일까? 모른다. 이것은 구현에 관한 이야기다. 어떤 것으로..

    10. 파일 시스템

    10. 파일 시스템

    파일 파일은 관련된 정보들을 이름을 통해서 묶어 놓은 것이다. 파일은 이름을 통해서 구분되고 접근한다. 일반적으로 비휘발성 보조기억장치에 저장한다. 파일은 생성, 삭제, 읽기, 쓰기 등의 작업을 할 수 있다. 운영체제에서는 저장 장치도 파일로 인식하여 볼 수 있게 해준다. 파일에는 파일 metadata(혹은 file attribute)가 존재한다. 메타데이터는 파일 자체의 내용이 아니라 파일을 관리하기 위한 각종 정보들이 포함된 데이터로 파일 이름, 유형, 저장된 위치, 파일 사이즈, 접근 권한, 시간, 소유자 등이 존재한다. 운영체제에서 이런 파일들을 관리하는 부분을 파일 시스템이라고 하며, 파일 및 파일의 메타데이터와 디렉토리 정보등을 관리한다. 디렉터리 디렉터리는 폴더와 같은 뜻으로, 파일의 메타데..

    9. 가상 메모리

    9. 가상 메모리

    Demand paging 프로세스가 실제로 페이지를 필요로 할 때 메모리에 올리는 것을 demand paging이라고 한다. 이런 행위의 장점은 다음과 같다. - I/O 양의감소 - 메모리 사용량 감소 - 빠른 응답시간 - 더 많은 수용자 수용 page fault 페이지 테이블에는 vaild-invalid bit가 존재한다. invalid는 프로세스에서 사용되지 않는 주소 영역인 경우&페이지가 물리적 메모리에 없는 경우(디스크에 스왑된 경우) 세팅된다. 만약 주소 변환시에 엔트리에 invalid bit가 세팅되어있다면, 이것을 page fault라고 부른다. invalid bit가 세팅된 페이지를 접근하면 먼저 mmu가 trap을 발생시킨다. 그 뒤에 OS가 cpu를 잡고 커널 모드로 전환해서 다음과 같..

    8. 메모리 관리

    8. 메모리 관리

    메모리의 주소 메모리 주소는 논리적 주소(가상 주소)와 물리적 주소로 구분된다. 논리적 주소 - 프로세스마다 독립적으로 가지는 주소 공간 - 각 프로세스마다 0번지부터 시작한다. - cpu가 실제로 보고 있는 주소다. 물리적 주소 - 메모리에 실제 올라가는 위치를 말한다. 어떤 코드를 컴파일하여 프로그램을 만들면 그 때 명령어들과 변수들의 논리적 주소가 결정된다. 이것이 실제로 동작하려면 메모리에 프로세스를 올려야한다. 이 때 논리적 주소가 실제 물리적 주소로 변환되어야 한다. 주소 바인딩 논리적 주소를 물리적 주소로 변환하는 과정을 주소 바인딩이라고 하는데, 물리적 주소가 언제 결정되느냐에 따라 3가지로 구분된다. compile time binding - 컴파일시에 물리적 메모리 주소가 결정된다. - ..

    7. 교착상태(Deadlock)

    교착상태(Deadlock) 교착상태(Deadlock)은 일련의 프로세스들이 서로가 가진 자원을 기다리며 block된 상태를 말한다. 여기서 자원은 하드웨어(cpu, memory..)가 될 수도 있고, 소프트웨어가 될 수도 있다. 교착상태 발생에는 4가지 조건이 존재한다. 이것들이 전부 동시 만족해야 교착상태가 발생한다. Mutual exclusin(상호배제) 매 순간 하나의 프로세스만이 자원을 사용할 수 있다. No preemption(비선점) 프로세스는 자원을 스스로 내려놓을 수 있지만 강제로 빼앗기지 않는다. Hold and wait(점유 대기) 자원을 가진 프로세스가 다른 자원을 기다릴 때 보유 자원을 놓지 않고 계속 가지고 있는다. Circular wait(순환 대기) 자원을 기다리는 프로세스간에..

    6. 프로세스 동기화

    6. 프로세스 동기화

    데이터의 접근 데이터의 접근은 다음과 같은 순서로 일어난다. 1. 데이터가 저장되어 있는 공간에 접근한다. 2. 연산할 데이터를 가져온다. 3. 연산을 실행한다. 4. 연산 결과를 다시 저장한다. ex) cpu-memory, 컴퓨터 내부-디스크, 프로세스-프로세스의 주소 공간 이 때 여러 프로그램이 하나의 저장 공간을 공유하는 경우 경쟁 상태(race condition)의 가능성이 존재한다. 경쟁 상태란 둘 이상의 입력 또는 조작의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태를 말한다. 예시로는 멀티프로세서 시스템, 공유 메모리를 사용하는 프로세스들, 커널 내부 데이터를 접근하는 루틴들이 있다. OS에서 경쟁 상태는 여러 프로세들이 동시에 공유데이터를 접근하는 상황을 의미하며 또 데이터의 최종..

    5. CPU 스케줄링

    CPU 스케줄링 프로세스에서 실행하는 작업은 두 가지로 나뉜다. 첫 번째는 cpu만 실행하는 작업이고, CPU burst라고 한다. 두 번째는 IO만 실행하는 작업이고, IO burst라고 한다. 보통 이 두 개가 섞여있는데, CPU는 짧게 쓰고 중간에 IO에 많은 시간이 필요한 작업을 I/O bound process라고 하고, CPU를 아주 길게 쓰는 계산 위주의 작업을 cpu bound process라고 한다. 이런 여러 작업들이 섞여 있기 때문에 cpu 스케줄링이 필요하다. cpu 스케줄링은 cpu와 IO 장치 등의 시스템 자원을 골고루 효율적으로 사용하는 것을 목표로 한다. 여기서 cpu 스케줄러라는 개념이 등장하는데 cpu 스케줄러는 어떠한 장치가 아니라 운영체제 상의 코드를 의미한다. cpu ..

    4. 프로세스 생성

    4. 프로세스 생성

    프로세스 생성 부모 프로세스가 자식 프로세스를 생성하는 것을 프로세스 생성이라고 한다. 리눅스, 유닉스 계열의 OS에서는 최초의 프로세스 init이 존재하고, 그 프로세스가 다른 자식 프로세스를 생성할 수 있고 그 자식 프로세스는 또 다른 자식 프로세스를 생성할 수 있다. 이 때 프로세스의 생성에는 사용자 프로그램이 아니라, 운영체제의 시스템 콜을 통해서만 가능하다. 이렇게 생성된 프로세스는 트리 구조를 형성하고 각자 고유한 번호인 pid를 가지게 된다. 프로세스의 생성은 두 가지 단계로 나뉘어진다. 1. 자식 프로세스가 부모 프로세스의 code, data, stack 그리고 cpu 문맥(프로그램 카운터), 운영체제 데이터, pcb등 문맥을 모두 복사한다. 2. 자식 프로세스는 복제 후 공간에 새로운 프..

    3. 프로세스

    3. 프로세스

    프로세스와 문맥 프로세스는 실행중인 프로그램이다. 프로그램이 실행되면서 변경되어 온 상태들이 있을텐데 그것들 현재에 나타낸 것을 프로세스의 문맥이라고 한다. 프로세스 문맥은 3가지로 나뉘어진다. cpu 수행 상태를 나타내는 하드웨어 문맥 - 프로그램 카운터, 각종 레지스터 프로세스의 주소 공간 - code, data, stack 프로세스 관련 커널 자료 구조 - PCB, 커널 stack 프로세스의 상태 프로세스의 상태는 크게 3개로 나뉜다. Running - cpu를 잡고 instruction을 수행중인 상태 Ready - cpu를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고 언제든 cpu를 받으면 Running 할 수 있는 상태) Blocked - cpu를 주어도 당장 instruction을 수..

    2. 시스템 구조와 프로그램 실행

    2. 시스템 구조와 프로그램 실행

    컴퓨터 구조 CPU cpu에는 저장 장치인 레지스터, mode bit, interrupt line 등이 존재한다. 레지스터는 데이터를 저장하는 역할을 하고, mode bit은 현재 커널 모드(0)인지 사용자 모드(1)인지를 나타낸다. interrupt line은 하드웨어나 소프트웨어의 인터럽트를 저장하는 공간으로, 이 공간에 인터럽트가 존재하면 운영체제에게 cpu를 넘겨주게 된다. Memory 메모리에는 사용자 프로그램과 운영체제가 저장되어 있으며 cpu가 메모리에 있는 사용자 프로그램을 번갈아가면서 실행한다. I/O device 입출력장치를 뜻하며, disk, 키보드, 프린터, 모니터 등이 해당된다. 각 입출력장치에는 local buffer와 device controller가 존재한다. device c..