본문 바로가기

운영체제

인터럽트와 시스템 콜 그리고 유저 모드, 커널모드 커널에서 CPU의 중요한 자원을 관리하기 때문에, 사용자가 그 중요한 자원에 접근하지 못하도록 모드를 2가지로 나눔 User mode 우리가 개발하는 프로그램은 일반적으로 유저 모드에서 실행, CPU 자원에 침범하지 못함 우리는 여기서 코드를 작성하고, 프로세스를 실행하는 등의 작업을 할 수 있음 Kernel mode 모든 자원 (드라이버, 메모리, CPU 등)에 접근, 명령을 할 수 있음 프로그램의 현재 CPU 상태를 저장함 커널이 인터럽트나 시스템 콜을 직접 처리, 즉 CPU에서 커널 코드가 실행됨 처리가 완료되면 중단됐던 프로그램의 CPU 상태를 복원 Kernel 이란? 운영 체제의 핵심 부분으로서, 응용 프로그램 수행에 필요한 여러가지 서비스를 제공 (1) 보안, (2) 자원관리, (3) 추상화 .. 더보기
8. OS 프로세스의 상태 변화 및 자바 스레드 상태 변화 OS 프로세스의 시작부터 종료까지 상태가 어떻게 변하는지 설명드립니다!! 프로그래밍 언어 레벨에서 정의된 상태는 또 다를 수 있습니다! 그래서 자바 스레드의 상태와의 차이도 비교해 드립니다! 그렇다면,, 상태를 왜 알아야 할까요? 서버가 불능에 빠지면 분석할 때 필요하기 때문이죠! 상태 분석을 위한 java의 thread dump에 대해서도 간략하게 소개합니다~! OS 프로세스의 상태 변화와 스레드 상태 변화는 비슷함 프로그램 언어 마다 스레드 상태 이름이 살짝 다름 자바 스레드 상태 변화 1. NEW 자바 스레드가 아직 시작하지 않은 상태 2. RUNNABLE 스레드 실행중인 상태 + 다른 리소스를 기다리는 상태도 포함 (운영체제의 run보다 포괄적인 개념) 3. BLOCKED 모니터 락을 얻기 위해 .. 더보기
4. 동기화, 경쟁조건, 임계 영역 동기화 (Synchronization) 여러 프로세스/스레드를 동시에 실행해도 Race condition 없이 공유 데이터의 일관성을 유지하는 것 하나의 객체를 두개의 스레드가 접근할 때 생긴 일 가정 : 싱글 CPU에 듀얼 스레드(T1, T2), 스레드 별로 상한 귤을 골라내게하려함 아래 프로그램을 실행 시키기 위한 프로세스 메모리 영역은 주황색! heap 메모리 (녹색) 안에는 두 스레드가 접근 가능한 badCounter 객체가 있음 객체의 처음 상태는 state = 0 두 스레드는 멀티 태스킹 방식으로 동작할 것이고 중간중간 컨텍스트 스위칭 CS가 발생하며 CPU에서 실행될 것임 이때! 두 스레드의 타이밍이 안맞는 상황을 가정해보자 T1이 실행되어 state 값을 R1에 올리고 CS가 발생했을 때,.. 더보기
3. CPU bound, IO bound 단어 정리 ※ CPU: 프로세스의 명령어를 해석하고 실행하는 장치 ※ burst : 어떤 현상이 짧은 시간안에 집중적으로 일어나는 일 ※ CPU burst : 프로세스가 CPU에서 한번에 연속적으로 실행되는 시간 ※ IO burst : 프로세스가 IO 작업을 요청하고 결과를 기다리는 시간 프로세스의 인생은 CPU 버스트와 IO 버스트의 연속! CPU 버스트 길이에 따른 빈도 프로세스들이 짧은 CPU 버스트 길이를 가지는 것을 보았을 때, 대부분의 프로세스들은 CPU 작업을 한번 수행할 때 길게하지 않고 짧게 끝냄 CPU bound CPU burst가 많은 프로세스 Ex) 동영상 편집 프로그램, 머신러닝 프로그램 IO bound IO burst가 많은 프로세스 Ex) 일반적인 백엔드 API 서버 (DB 서.. 더보기
2. 컨텍스트 스위칭 뽀개기 컨텍스트 프로세스/스레드의 상태 CPU, 메모리의 상태 등... CPU는 register 컨텍스트 스위칭 (Context Switching) CPU/코어에서 실행 중이던 프로세스/스레드가 다른 프로세스/스레드로 교체되는 것 (정확히 말하면 어떤 프로세스의 안에 실행되는 쓰레드가 다른 프로세스의 안에 실행되는 스레드로 바뀐다는 뜻) 왜 필요한가? 여러 프로세스/스레드를 동시에 실행시키기 위해서 언제 발생하는가? 1. 주어진 time slice (quantum)를 다 사용했거나 2. IO 작업을 해야하거나 3. 다른 리소스를 기다려야 하거나 등... 컨텍스트 스위칭은 누구에 의해 실행되는가? OS 커널 (kernel) = 각종 리소스를 관리/감독하는 프로그램 컨텍스트 스위칭은 구체적으로 어떤 과정으로 일어날.. 더보기
프로세스, 스레드, 멀티태스킹, 멀티 스레딩, 멀티 프로세싱, 멀티 프로그래밍 정리 사전지식 정리 프로그램 (program) 컴퓨터가 실행할 수 있는 명령어들의 집합 CPU (Central Processing Unit) 명령어를 실행하는 연산 장치 메인 메모리 (Main memory) 프로세스가 CPU에서 실행되기 위해 대기하는 곳 IO (Input/Output) 파일을 읽고 쓰거나, 입출력 장치와 데이터를 주거나 받는 것 네트워크의 어딘가와 데이터를 주고 받는 것 프로세스 (process) 컴퓨터에서 실행 중인 프로그램 단위!, OS가 관리 (프로그램을 실행해주는 주체) 각각의 프로세스는 독립된 메모리 공간 (Virtual Memory (RAM+SSD 또는 HDD)= Code + Data + Stack + Heap)을 할당 받음 , 명령어들과 데이터를 가짐 최소 1개의 스레드를 가짐 .. 더보기
프로세스와 쓰레드 프로세스 운영체제로부터 자원을 할당받는 작업의 단위 → 실행 중인 프로그램 예를들어 우리가 Java 프로그램을 실행시키면 이 프로그램은 프로세스라는 이름으로 운영체제 위에서 실행됨 프로세스 구조 OS가 프로그램 실행을 위한 프로세스를 할당해줄때 프로세스안에 프로그램 Code와 Data 그리고 메모리 영역 (Stack, Heap)을 함께 할당해줌 1. Code : Java Main 메소드와 클래스 같은 코드 2. Data : 프로그램이 실행중 데이터를 저장할 수 있는 저장공간 → 전역 변수, 정적 변수 (Static), 배열 등 초기화된 데이터를 저장하는 공간 3. Memory (메모리 영역) 3-1. Stack : 지역변수, 매개변수 리턴 변수를 저장하는 공간 3-2. Heap : 프로그램이 동적으로 필.. 더보기