Computer Science/Operating System

Computer Science 모아보기 👉🏻 https://github.com/seoul-developer/CS GitHub - seoul-developer/CS: 주니어 개발자를 위한 전공 지식 모음.zip 주니어 개발자를 위한 전공 지식 모음.zip. Contribute to seoul-developer/CS development by creating an account on GitHub. github.com 💋 What is OS? ✔️ 정의 하드웨어 자원을 애플리케이션에서 사용할 수 있도록 하는 소프트웨어 Software that converts hardware into a useful form for applications ✔️ 기능 소프트웨어 관점에서 프로그램의 실행 환경 제공 하드웨어 자원을..
Computer Science 모아보기 👉🏻 https://github.com/seoul-developer/CS GitHub - seoul-developer/CS: 주니어 개발자를 위한 전공 지식 모음.zip 주니어 개발자를 위한 전공 지식 모음.zip. Contribute to seoul-developer/CS development by creating an account on GitHub. github.com 💋 Unsupported hardware architecture detected! Virtualbox를 다운로드하려고 하다보면 아래와 같은 에러 메세지를 만날 수 있다. Unsupported hardware architecture detected! The installer has detected..
💋 인트로 프로그래밍에서의 입출력(I/O) 작업은 다양한 접근 방식을 통해 처리됩니다. 이 포스팅에서는 Block vs. Non-Block, 그리고 Sync vs. Async의 다양한 I/O 처리 방식을 알아보고, 각각의 특징과 사용 사례에 대해 알아보겠습니다. 💋 Blocking I/O VS Non-Blocking I/O ⇒ 다른 주체가 작업할 때 물리적으로 자신의 제어권이 있는지가 기준입니다. (물리적인 실행 특성) ✔️ Blocking I/O 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면, 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것 물리적으로 I/O 작업이 끝날 때까지 다른 작업을 하지 않고 기다리는 것을 의미합니다. ✔️ Non-Blocking I/O 다른 주체의 작업에..
💋 유저 모드 VS 커널 모드 ✔️ 유저 모드(User Mode) 우리가 작성하는 프로그램의 코드를 실행하는 모드 직접적으로 하드웨어에 접근 X 운영 체제의 지원을 통해 자원에 접근 안정성이 높고, 프로그램 간의 간섭을 방지하여 시스템 전반의 안정성을 유지 ✔️ 커널 모드(Kernel Mode) 운영 체제의 핵심 부분인 커널이 동작하는 모드 하드웨어 자원에 직접적으로 접근하고, 시스템 전체의 제어를 담당 일반적인 프로그램은 커널 모드에서 직접 실행되지 않고, 유저 모드에서 커널의 서비스를 호출하여 자원을 사용 ✔️ 커널 모드가 필요한 이유 개발자가 직접 작성한 코드가 하드웨어에 직접 영향을 주면, 전체 컴퓨터 시스템이 붕괴될 수 있습니다. 시스템을 보호하기 위해서 하드웨어와 관련된 부분은 커널이 담당하고..
💋 CPU 스케줄러와 Dispatcher ✔️ CPU 스케줄러 (CPU Scheduler) 여러 프로세스 사이에서 CPU를 할당 CPU 사용률을 최대화하고 응답 시간을 최소화하여 시스템 성능을 향상시키는 것이 목적 프로세스 스케줄링 알고리즘을 사용하여 어떤 프로세스가 CPU를 사용할지 결정하며, 준비 큐(Ready Queue)에서 대기 중인 프로세스 중 하나를 선택합니다. ✔️ 디스패처 (Dispatcher) CPU 스케줄러가 선택한 프로세스를 실행 가능한 상태로 만들어주는 역할 프로세스가 CPU를 점유하고 실행될 수 있도록 해당 프로세스를 실제로 CPU에 할당 기능: 디스패처는 Context Switching(프로세스의 상태를 변경하고, CPU 레지스터와 메모리 상태를 변경 등 현재 실행중인 프로세스의..
💋 운영체제에서 프로세스의 상태프로세스의 상태는 주로 다음과 같은 다섯 가지로 분류됩니다: new, ready, running, waiting, terminated. New (생성) 프로세스가 생성되었지만 아직 실행되지 않은 상태 프로세스가 초기화되고 자원이 할당되기를 대기 Long term scheduler가 허락해주어야 하는 상황은 흔치 않으므로, 보통 곧바로 Ready 상태로 넘어간다. Ready (준비) CPU에서 프로세스가 실행되기를 기다리는 상태 스케줄러에 의해 실행되면 Running로 전환 Running (실행) CPU가 할당된 상태로 현재 실행 중인 상태 멀티 태스킹 하다가 quantum이 지나거나, I/O 작업이 시작되면 Ready로 전환 Waiting (대기) I/O 작업 또는 crit..
💋 데드락이란? 2개 이상의 스레드가 서로가 가진 리소스를 기다리느라 무한히 대기하는 상태 💋 데드락의 발생 조건 데드락은 다음 네 가지 조건이 동시에 성립할 때 발생합니다. ✔️ Mutual Exclusion 프로세스끼리 자원 공유 X. 여기서 자원은 critical section, lock일 수도 있고, CPU, Memory, SSD, 프린터일 수도 있음. ✔️ Hold and Wait 프로세스가 이미 1개 이상의 리소스를 취득한 상태에서, 다른 프로세스가 사용중인 리소스를 추가로 기다린다. P1은 R3 리소스를 취득한 채로, P2가 사용중인 R1 리소스를 추가로 기다린다. ✔️ No Preemption 리소스 반환은, 오직 그 리소스를 취득하고 있는 프로세스만 할 수 있다. P1은 억지로 R1을 빼..
💋 인트로 지난 포스팅에 이어, 스레드 동기화 메커니즘 중 하나인 모니터에 대해 설명하겠습니다. 💋 모니터(Monitor) ✔️ 개념 baeldung의 모니터에 대한 글을 보면, 모니터를 아래와 같이 정의합니다. 모니터는 mutual exclusion과 cooperation을 통해 스레드 간의 안전한 공유자원 접근을 보장하는데 사용됩니다. mutual exclusion ⇒ 동시에 하나의 스레드만 진입해서 실행 가능 cooperation ⇒ 조건에 따라 스레드가 대기 상태로 전환 가능 스레드가 어떤 공유자원에 접근하는 것을 말 그대로 모니터할 수 있기 때문에 모니터라고 부른다고 합니다. ✔️ 동작 원리 모니터는 뮤텍스와 condition variable로 구성되어 있으며, waiting queue와 ent..
💋 임계 영역(Critical Section) 지난 포스팅에서 언급한 것처럼, 여러 프로세스/스레드가 동시에 실행되더라도 공유 데이터의 일관성을 유지하기 위해서는 동기화가 필요합니다. 동기화에 대한 문제를 해결하기 위해서, 개발자들은 하나의 메서드에 한 번에 딱 하나의 스레드만이 진입해서 실행(= mutual exclusion)할 수 있도록 하는 방법을 생각해 냈습니다. 이때, 이 메서드의 영역을 임계 영역(Critical Section)이라고 부릅니다. do { // enter section -> 임계 영역에 진입할 요건이 되는지 확인 // critical section // exit section -> 이후에 다른 스레드도 임계 영역에 진입할 수 있도록 처리 } while (true) 임계 영역 내에..
💋 인트로 안녕하세요. 우아한테크코스 5기 깃짱이라고 합니다. 이번 포스팅에서는, 동기화의 필요성에 대해서 이야기하면서, 관련 용어들을 정리해보려고 합니다. 💋 동기화의 필요성 하나의 객체에 여러 개의 스레드가 접근한다면? 어떤 문제가 발생할 수 있을까? ✔️ 실습 예시를 통해 알아보자! (자세한 실습 코드는 이 링크 참고) private static final class SynchronizedMethods { private int sum = 0; public void calculate() { sum++; } } calculate() 메서드를 동시에 1000개의 스레드가 호출한다고 해보자. 모든 스레드의 작업이 종료된 후 sum의 값은 1000일까? 우울하게도 아니다. 왜지? ✔️ CPU의 입장에서 생각..
깃짱
'Computer Science/Operating System' 카테고리의 글 목록