본문 바로가기

CS 과목(CS科目)

asynchronous(비동기) programming, asynchronous I/O, asynchronous communication 동기와 비동기 개념과 차이 — Koras02코딩웹 (tistory.com) 동기와 비동기 개념과 차이 데이터를 받는 방식인 동기와 비동기. 이 둘의 개념에 대해 알아보고 둘의 차이점을 알아보도록 하겠습니다. 1. 동기(synchronous: 동시에 일어나는) - 동기는 말 그대로 동시에 일어난다는 뜻입니다 koras02.tistory.com 위 사이트도 참조하여 동기, 비동기의 정의를 요약해보았다. 동기의 정의 1. 결과가 반드시 [동시]에 일어나야 한다. 2. 요청(or 호출)을 하면, 실행이 끝날 떄까지 기다려야 한다. 비동기의 정의 1. 결과가 반드시 [동시]에 일어나지x 2. 요청(or 호출)을 하면, 그 실행이 끝나지 않더라도 다른 작업을 수행할 수가 있다. (물론, non-blocking IO.. 더보기
block I/O vs non-block I/O with Socket I/O ( I/O Multiplexing도 설명함) I/O: Input Output의 약자로서 , 데이터의 입출력을 의미. I/0 종류 1. network(socket) I/O -> 네트워크 통신은 Socket을 통해서 데이터가 입출력 된다. 2. file I/O 3. pipe I/O( 프로세스 간의 통신 시 사용되는 개념) 4. device I/O Socket I/0를 가지고 OS Level에서 block I/O와 non block I/O의 동작을 설명하겠다. Block I/O : I/O 작업을 요청한 프로세스/스레드는 요청이 완료될 때까지 BLOCK됨. ( 잘 사용되지 않고, non block이 일반적으로 사용됨) ( 대부분의 프로그래밍 언어는 non blocking I/O를 적극 사용) 일단 각 Socket에는 데이터를 받는 recv_buffer와 .. 더보기
스레드 풀(Thread Pool)은 왜 쓰는 걸까?? 어떻게 쓰는 게 잘 쓰느는 걸까?? 위와 같이 서버의 각 Request마다 1개의 스레드를 만들어서, 응답을 하게 하는 스레드 모델이 있다고 하자. 이때, 한 가지 짚고 넘어 가야 할 issue가 있다. 만약 thread per request 모델의 동작 방식이 서버에 들어 오는 요청마다 스레드를 새로 만들어서 처리하고 처리가 끝난 스 레드는 버리는 식으로 동작한다면 어떻게 될까?? -> 당연히 스레드 생성에 소요되는 시간 때문에 요청 처리가 더 오래 걸릴 것이다. ( 스레드는 OS Kernel level에서 생성이 되는 것이다. user mode는 단순히 프로세스/스레드를 실행하는 mode지만, kernel mode는 우리가 이전 시간에서 살펴 보았듯이 문맥 교환 등의 여러 추가적인 비용이 많이 드는 작업이다.) SOLUTION : Th.. 더보기
온갖 Level에서의 Thread 총정리( 하드웨어 스레드, os 스레드, native 스레드, kernel 스레드, user 스레드, green 스레드), 자바 스레드 모델 우리가 만든 프로그램(user program)은 OS Kernel을 통해서 컴퓨터(Memory, cpu , 그 외의 devices)내에서 실행이 된다. 오늘은 이 각 Level에서 존재하는 thread에 대해 살펴 볼 것이다. Hardware Thread( hyper-threading과 비슷 ) 물리적인 core마다 하드웨어 스레드가 2개 이상일 때, 그 각각의 스레드를 hardware thread라고 불린다. -> cpu/core 입장에서는 고민이 하나 있다. 그것은 메모리로부터 데이터를 read/write할 때, 데이터를 가지고 오는 시간이 상대적으로 길어서 cpu/core가 유휴 상태에 들어 간다는 것이다. 그래서 Intel에서 최초로 hyper threading 기법으로 cpu/core가 메모리를.. 더보기
인터럽트(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개의 프로세스/스레드만이 리소스를 가질 수가 있 다. 동시에 여.. 더보기