멀티 스레딩 코드와 데이터 영역을 공유하기 때문에 shared memory가 따로 필요하지않고 생성 리소스도 훨씬 작고, context switching 비용도 적게든다. 전체적으로 리소스 효율이 좋고 확장성도 좋다. 또한 프로세스에 대한 요청을 처리할 때 스레드를 생성해서 non-blocking으로 빠르게 처리할 수 있다. 멀티 코어 프로그래밍 이전에 공부했던 멀티 프로그래밍은 여러 개의 프로그램이 동시에 돌아가는 것 처럼 보이는 방법이었다. 하지만 멀티 코어 프로그래밍은 코어가 여러 개이기 때문에 실제로 동시에 프로그램을 실행할 수 있다. 이러한 방법을 병렬 실행 Parallel execution이라고 한다. 동시 실행을 할 경우의 문제. 어떤 작업을 병렬로 작업할 수 있는가? 작업을 동시에 처리해야..
Session.setAttribute("user", new SessionUser()); 를 사용해서 User A, B를 저장하면 Session.getAttribute("user") 사용 시 어떻게 유저를 구분하여 정확히 값을 가져올 수 있을까? 세션은 서버와 클라이언트가 연결된 상태를 말한다. 즉 세션을 통해서 getAttribute를 한 순간부터 그 유저라는 것을 알고있는 것이다. 모든 session에서 key가 "user"인 값을 찾는 것이 요청을 보낸 Session에서 attribute가 "user"인 값을 찾는 것이다. 다음과 같이 서버에는 각 클라이언트와의 세션 정보가 있다. 이때 클라이언트가 session을 통해서 요청을 보내면 해당 session에서 유저를 찾아낼 수 있는 것이다.
프로세스의 생성 UNIX 기반 OS에서는 fork() system call을 호출해서 프로세스를 생성한다. fork()는 자식 프로세스를 생성하는 system call이기 때문에 부모 프로세스의 주소 공간을 복사한다. fork()한 이후 부모 프로세스를 진행할 수도 있고, 자식 프로세스가 종료되는 것을 wait()할 수도 있다. wait()를 호출하면 자식 프로세스가 종료될 때까지 블록 상태로 기다렸다가 종료되면 블록이 풀린다. 프로세스 생성 횟수 fork()를 n 번 했을 때 생성된 프로세스도 다음 fork() 내용을 수행하기 때문에 총 실행되는 프로세스의 수는 2^n이 된다. IPC 동시에 여러 프로세스가 실행될 때 프로세스는 독립적으로 실행될 수도 있고, 서로 협력하여 실행할 수도 있다. Indep..
Process State OS가 프로세스를 관리하는 과정에서 프로세스에는 5가지 상태가 존재한다. New: 프로세스가 생성됐을 때의 상태 Ready: 프로세스가 프로세서에게 선택될 때까지 큐에서 기다리고 있는 상태 Running: 프로세서에 선택되어 명령을 수행하고 있는 상태 Waiting: I/O Event가 발생해서 I/O가 끝날 때까지 기다리고 있는 상태 Terminated: 프로세스가 종료된 상태 PCB (=TCB) OS가 프로세스를 관리하기 위해 Process(=Task) Control Block이라는 구조체(=클래스)를 만들어서 각 프로세스가 가져야하는 모든 정보를 저장한다. PCB가 가지고 있는 주요 정보 Process State: 프로세스의 현재 상태 Program Counter (PC) ..