본문 바로가기

CS 과목(CS科目)

인터럽트(interrupt), 시스템 콜(System Call), 유저 모드(user mode), 커널 모드(kernel mode) User mode : user mode에서 우리가 작성/개발하는 프로그램이 실행된다. Kernel : OS의 핵심으로서, 시스템의 전반을 관리/감독하는 역할을 하며, 하드웨어와 관련된 작업을 직접 수행. user mode -> kernal mode 우리가 작성/개발하는 프로그램은 일반적으로 user mode에서 실행이 된다. 프로그램 실행 중에 인터럽트(interrupt)가 발생하거나 시스템 콜(system call)을 호출하게 되면 제어권(control)을 OS에게 주며 kernel mode로 전환. kernel mode로 전환을 하게 되면, OS가 프로그램의 현재 CPU 상태를 저장을 한다. (Kernel mode : 인터럽트, 시스템 콜을 직접 처리. 즉 CPU에서 인터럽트, 시스템 콜 관련 커널 .. 더보기
CPU 스케줄러, Dispatcher CPU 스케줄러 vs Dispatcher Scheduler : CPU에 실행시킬 Ready Queue의 프로세스/스레드를 선택하는 역할.( OS 기능 ) Dispatcher : Scheduler에 의해 선택된 프로세스/스레드에게 CPU를 할당하는 역할.( OS 기능 ) 1. Kernel Mode에서 문맥 교환 작업이 끝나면, User Mode로 전환하여 새롭게 시작될 프로세스/스레드에게 제어권을 넘김 2. 새롭게 선택된 프로세스/스레드가 어디서부터 실행되어야 하는지 적절한 위치로 이동시킴. ( 문서에 다라서는 스케줄러와 디스패처를 엄밀히 구분하지 않고 설명하는 경우도 있다.) 스케줄링 선점 방식 Non preemptive scheduling vs Preemtive Scheduling Non preempt.. 더보기
OS Process state vs JAVA Thread state 프로세스/스레드의 OS Level에서의 State 맨 처음, new로 인해서 프로세스/스레드가 생성이 되어, cpu에 의해 실행될 준비(ready)를 한다. new에서 ready state로 넘어 갈 때, Long term Scheduler의 허락을 받아야 한다. 그러나 Long term scheduler는 RealTime OS와 같은 특별한 OS에서만 동작을 하고, 보통의 우리가 사용하는 OS에서는 Long Term Scheduler 없이, 바로 new에서 ready로 넘어 간다고 생각해보 무방하다. ready state에 있는 프로세스/스레드는 큐에 대기해 있다가, CPU에서 실행 중인 프로세스/스레드가 time slice를 다 썼거나 , critical section에 진입하기 위하여 대기하게 위하.. 더보기
dead lock(교착상태) with JAVA Deadlock(교착상태) 두 개 이상의 프로세스/스레드가 서로가 가진 리소스를 기다리는 상태 자동차는 프로세스/스레드를 나타내며, (1,2,3,4)는 리소스를 의미한다. 각 자동차는 직진을 하기 위해서, 2개의 리소스를 지나야 한다. 근데, 각 자동차가 동시에 직진을 하면, 오른쪽 그림과 같은 상태가 된다. 각 자동차는 1개의 리소스를 보유하고 있으나, 전진을 하기 위해서는 다른 자동차(프로세스/스레드)가 보유하고 있는 리소 스를 획득해야는데, 다른 자동차들도 또 다른 리소스를 획득하기 위하여 서로 대기 중이다. Deadlock이 발생하는 4가지 조건 1. Mutual exclusion : 리소스를 공유해서 사용할 수 없다, 즉 한 번에 1개의 프로세스/스레드만이 리소스를 가질 수가 있 다. 동시에 여.. 더보기
모니터(monitor)(sub: 그 모니터 아닙니다 ㅋㅋ) 모니터 1. mutual exclusion을 보장 2. 조건에 따라 스레드가 대기(waiting) 상태로 전환 가능 모니터는 언제 사용되나? 1. 한번에 하나의 스레드만 실행돼야 할 때(mutual exclusive) 2. 여러 스레드와 협업(cooperation)이 필요할 때! 모니터의 구성 요소 1.mutex 2.condition variable(s) : waiting queue를 가지며, 그 안에 조건이 충족되길 기다리는 스레드들이 대기 상태로 머무는 곳! condition variable에서 주요 동작(operation) 1. wait : thread가 자기 자신을 condition variable의 waiting queue에 넣고 대기 상태로 전환 2. signal : waiting queue에.. 더보기
스핀락(spinlock) 뮤텍스(mutex) 세마포(semaphore) 임계 영역 공유 데이터의 일관성을 유지하기 위해, 하나의 프로세스/스레드만 진입할 수 있는 코드 영역!! Q. 그럼 어떻게 하나의 프로세스/스레드만 진입(mutual exclusive)시킬까? A. Lock을 활용! 참고로, lock은 모든 프로세스/스레드에서 동시 접근이 가능해야 하기에, 전역(global)으로 선언을 해야 한다. while(test_and_set(&lock) == 1) ; -> lock==1인 동안에는 무한 루프를 계속 돌며, critical section에 진입하기 못하게 한 다. (mutual exclusive 해결) ( 위 코드에서 만약 T1이 Critical Section 도중에 context switching이 일어났다고 해도, 다른 프로세스/스레드들은 T1이 다시 재실행되어.. 더보기
동기화(synchronization), 경쟁 조건(race condition), 임계 영역(critical section) 하나의 객체를 두 개의 스레드가 접근할 때 생기는 일 귤박스가 2개 있고, 2개의 스레드에게는 각각 서로 다른 귤 박스를 담당하게 할 것이다. badCounter 객체는 2개의 스레드가 공유한다. 만약, 불량인 상태인 각각의 귤박스에 1개씩 있다고 하자. 그러면 우리가 원하는 state의 값은 2이다. 그러나, 항상 우리가 원하는 값이 높은 확률로 나오지 않는다. 그 이유를 아래에서 살펴보자. 1. LOAD state to R1 : state값을 cpu 레지스터 R1에 로딩. 2. R1 = R1 + 1 : 레지스터 R1에 +1을 한다. 3. STORE R1 to state : 레지스토 R1의 값을 메모리에 반환을 한다. Counter::increament() 메서드의 state++를 어셈블리어로 변환하면.. 더보기
cpu bound vs io bound 버스트(Burst) 어떤 현상이 짧은 시간 안에 집중적으로 일어나는 일. CPU 버스트(Burst) 프로세스가 CPU에서 한번에 연속적으로 실행되는 시간. (즉, time splice 동안 프로세스의 명령어들이 연속적으로 실행된 시간) I/O 버스트(Burst) 프로세스가 I/O 작업을 요청하고 결과를 기다리는 시간. 프로세스의 인생은 CPU Burst와 IO Burst의 연속 프로세스는 위 그림과 같이 CPU Burst 작업과 I/O 작업, 이 2가지 작업만을 번갈아 가면서 실행하게 되고, 실행이 끝이 난다. 대부분의 프로세스는 CPU Burst 8ms 내로 끝이 난다. CPU bound 프로세스 CPU Burst가 많은 프로세스. CPU Bound 프로세스의 예시 1. 동영상 편집 프로그램 -> 동영.. 더보기