CS/운영체제 11

[OS] 파일 시스템(File System)

파일 시스템(HDD)의 주요 문제OS가 파일 시스템에 파일을 어떻게 할당(allocate) 할 것인가?효율적으로, 빠르게 접근이 가능하도록3가지 방법연속적 할당(Contiguous Allocation)연결 할당(Linked Allocation)색인 할당(Indexed Allocation) 연속적 할당정의: 파일 시스템(HDD)에 파일들을 연속적으로 배치하는 방법문제점: 외부 단편화(external fragmentation) 문제 발생또한, 파일을 수정하면서 파일 크기가 늘어났을때, 현재 공간의 용량을 초과하면 전체를 또 맞는 크기의 공간으로 옮겨줘야함 연결 할당정의: 파일을 블럭 단위로 쪼재고, 이거를 링크 리스트 방식으로 관리하는 방법장점: 외부 단편화 문제X단점: 랜덤 엑세스 불가능: 링크 리스트로 ..

CS/운영체제 2024.09.02

[OS] 가상 메모리

배경정의: 프로세스를 실행할 때 실행에 필요한 일부만 메모리에 로드하고 나머지는 디스크(backing store)에 두는 기술따라서, 프로세스 전체가 물리적 메모리에 있는 것'처럼' 수행되어, 물리적 메모리가 훨씬 많이 있는 것처럼 보이게 됨결과적으로 더 많은 프로그램을 동시에 실행 가능  Demand Paging정의: 현재 필요한 Page만 메모리에 올리는 방법Page Fault Handling을 통해 구현 가능Page Fault: 요청된 페이지가 MM에 없는 경우 Page Fault Handling(처리 방법)valid-invalid 1bit를 이용해서 처리valid: page가 메모리에 존재 ( & 해당 프로세스에 맞는 페이지 legal )invalid page가 메모리에 존재 ( | 해당 프로세스..

CS/운영체제 2024.09.02

[OS] 메모리 관리

배경지금까지는 CPU를 중점으로 프로세스들이 CPU를 어떻게 나눠 가지냐를 다뤘다면, 이제부터는 메모리에 프로세스를 어떻게 배치하고 관리할지에 대해서 학습 메모리 할당(Allocation)Contiguous Memory Allocation정의: 한 프로세스를 메모리상에 연속적인 위치에 할당하는 방법 - 간단한 방법즉, 프로세스를 한 덩어리채로 메모리에 할당한다는 것방법: 메모리의 어느 부분이 비어있는지에 대한 정보(free-block list)를 통해 프로세스를 할당Dynamic 프로세스를 빈 공간(hole)에 넣는 3가지 전략First-Fit: 프로세스를 넣을 수 있는 첫번째 hole에 할당하는 전략Best-Fit: 프로세스를 넣을 수 있는 공간 중에 가장 작은 hole에 할당하는 전략Worst-Fit..

CS/운영체제 2024.09.02

[OS] 데드락

기초정의: 일련의 프로레스( or 스레드)들이 서로가 가진 자원을 기다리며 block되어 더 이상 진행이 될 수 없는 상태 데드락 4가지 발생 조건아래 4가지 조건이 모두 만족해야만 데드락 발생Mutual Exclusion(상호 배제): 매 순간 하나의 프로세스만이 자원을 사용 가능Hold & Wait(보유 대기): 한 스레드가 자원을 점유(hold)하고 있는 상황에서, 다른 자원을 얻기 위해 대기(wait)를 하고 있는 상황No Preemption(비선점): 프로세스는 OS에 의해 강제로 자원을 빼앗기지 않는다.Circular wait(순환 대기): 자원을 기다리는 프로세스 간에 사이클이 형성되어야 한다. RAG데드락을 시각적으로 더 잘 이해하기 위해서 관계를 그래프로 표현해보자!Resource-All..

CS/운영체제 2024.09.02

[OS] 프로세스 동기화(세마포어와 뮤텍스)

배경공유 데이터에 동시에 접근할 때 데이터 일관성에 대한 문제가 발생할 수 있다.멀티 스레드: 공유 공간멀티 프로세스: 공유 메모리다음 C 코드는 pthread 라이브러리를 이용하여 두 개의 스레드를 생성하고, 각 스레드에서 전역 변수 sum에 10,000씩을 더하는 작업을 수행한다. 이론적으로 두 스레드의 작업이 완료된 후 sum의 값은 20,000이 되어야 하지만, 실제로는 이 값이 다르게 나오는 경우가 있다.경쟁 상태(Race Condition)코드가 예상과 다른 결과를 출력하는 주된 이유는 `sum` 변수에 대한 동시 접근 때문이다. 각 스레드가 `sum++` 연산을 수행할 때, 이 연산은 사실상 세 부분으로 나뉘어 실행된다:`sum` 변수의 현재 값을 읽는다.값을 1 증가시킨다.증가된 값을 다시..

CS/운영체제 2024.09.02

[OS] CPU 스케줄링

프로세스 스케줄링ready 상태에 있는 프로세스들이 많음 -> 큐 시스템을 이용해서 관리큐 시스템에 PCB가 더블 링크 리스트 형태로 저장되어 있음   스케줄러일반적으로 스케줄러라고 하면, 단기 스케줄러를 의미장기(long-term) 스케줄러: 작업(job) 스케줄러라고도 불리며, 어떤 프로세스를 ready 큐에 삽입할지 결정하는 프로세스 생성 상태에 관여하는 스케줄러중기(medium-term) 스케줄러: 너무 많은 프로세스를 메모리에 할당해서 시스템 성능이 저하되는 경우에, 메모리에 적제된 processd의 수를 조절하기 위한 스케줄러. 주로 swapping을 통해 문제를 해결단기(short-term) 스케줄러: CPU 스케줄러라고도 불리며, ready 상태의 프로세스중 running 상태로 변경할 프..

CS/운영체제 2024.09.02

[OS] 스레드

배경지금까지는 프로세스가 싱글 스레드에서만 실행된다고 가정하고 그 처리 과정에 대해서 배웠음하지만 프로세스는 여러개의 스레드를 가질 수 있음  프로세스 vs 스레드프로세스정의: OS로부터 독립적인 메모리 공간(코드, 데이터, 스택, 힙)을 할당받은 작업의 단위특징각 프로세스간 '기본적으로' 메모리 영역을 공유 하지 않음만약 접근하고 싶다면 IPC를 사용해야함 스레드정의: 프로세스 내에서 실행되는 흐름의 단위특징: 스레드들 간 코드, 데이터, 힙 영역을 공유하고, 스택 영역만이 스레드별로 할당된다.각 프로세스들은 최소 한개 이상의 스레드를 가지고 ( 이 스레드를 메인 스레드라고 함 )프로세스는 여러 개의 스레드를 가질 수 있다.  멀티 프로세스 vs 멀티 스레드프로그램을 구현할때 여러가지 이유로 하나의 작..

CS/운영체제 2024.09.02

[OS] 프로세스간 통신(IPC)

배경프로세스 종류독립적(independent): 아무런 데이터를 공유하지 않는 프로세스협력적(cooperating): 다른 프로세스에게 영향을 주거나 or 받는 프로세스즉, 데이터를 공유하고 있는 상황이럴때 IPC(Inter-Process Communication)가 필요 IPC정의: 협력적 프로세스간의 데이터를 교환하는 방법종류: 2가지 모델이 존재공유 메모리(shared memory)메세지 패싱(message passing)공유 메모리메세지 패싱정의:- 협력 프로세스 간 공유되는 메모리 공간을 통해 데이터를 교환하는 방식이다.- 협력 프로세스들은 해당 공간에 직접 접근하여 필요한 데이터를 읽고 쓰기가 가능하다정의:- 협력 프로세스들이 OS(커널)을 통해 데이터를 교환하는 방식이다.- 협력 프로세스들은..

CS/운영체제 2024.09.02

[OS] 프로세스 구조, PCB와 Context Switching

개념프로세스 정의: 현재 실행 중인 프로그램프로그램은 저장장치에 있는 단순 텍스트 파일을 의미 프로세스 구조프로세는 메모리에서 다음과 같은 형태로 존재한다.헤더 + 코드 + 데이터 3종류  Header: 프로그램 메타 정보 ( 파일 크기 .. )code(=text): 프로그램 코드(명령어)data: 전역 변수, static 변수가 저장되는 공간stack: 각 서브루틴(함수)의 파라미터, 지역변수, 리턴주소heap: 런타임 시간에 동적으로 할당되는 데이터들 p.s) 가장 처음 스택에 push되는 서브루틴은 main     프로세스 상태 new: 프로세스가 새로 만들어진 상태ready: cpu를 할당 받기 위해 기다리는 상태running: cpu를 할당받아 실행중인 상태waitting: 이벤트(인터럽트)를 ..

CS/운영체제 2024.09.02

[OS] 시스템콜과 I/O인터럽트

OS 구성요소시스템콜과 시스템 프로그램은 OS의 2가지 핵심적인 구성 요소 시스템콜 탄생 배경OS의 목적은 유저가 컴퓨터 자원(하드웨어)를 효율적으로 사용할 수 있도록 도와주는 것해당 목적을 위해 유저 프로그램은 자원(하드웨아)을 사용하고 싶을때 반드시 OS(=Kernels)에 요청을 해야함 (유저/하드웨어 분리)따라서, OS에서 유저에게 자원들을 사용할 수 있도록 해주는 인터페이스(함수)를 구현해당 인터페이스를 시스템 콜이라고 함  시스템콜 개념정의: 사용자(프로세스)가 컴퓨터 자원(하드웨어)의 기능을 사용할 수 있도록 해주는 API특징: 시스템콜을 주로 고급 프로그래밍 언어(C, C++)로 작성되며 때때로 어셈블리 언어를 사용 파라미터OS의 서비스를 사용하기 위해 필요한 정보를 파라미터로 전달을 해야..

CS/운영체제 2024.09.02