본문 바로가기

OS20

[OS] 동기화 (프로세스, 스레드) * 동기화: 공동의 목적을 위해 동시에 수행되는 프로세스 즉, 프로세스들의 수행 시기를 맞추는 것을 의미함.e.g. 워드 프로세서 프로그램: 맞춤법 검사 프로세스, 입력 내용을 화면에 출력하는 프로세스 등등    * 실행 순서 제어: 프로세스를 올바른 순서대로 실행하기 고전적인 문제) reader writer problem: reader와 writer프로세스는 무작정 아무렇게나 실행되어선 안된다. 실행의 순서가 있기 때문.  reader 프로세스는 'Book.txt 안에 값이 존재한다'는 특정 조건이 만족되어야만 실행 가능하다.  따라서 writer가 먼저 선행되어야함.    * 상호 배제: 동시에 접근해서는 안되는 자원에 하나의 프로세스만 접근하게 하기 고전적임 문제1) Bank accont probl.. 2025. 3. 16.
[OS] CPU 스케줄링 알고리즘 7가지 * 선입 선처리 스케줄링 (FCFS) = first come first served  - 단순히 준비 큐에 삽입된 순서대로 처리하는 비선점 스케줄링 - 먼저 CPU를 요청한 프로세스부터 CPU 할당 - 단점: 프로세스들이 기다리는 시간이 매우 길어질 수 있다는 부작용 (= 호위 효과)    * 최단 작업 우선 스케줄링 (SJF) = shortest job first - 호위 효과를 방지하기 위해 CPU 사용이 긴 프로세스는 나중에 실행, CPU 사용 시간이 짧은 프로세스는 먼저 실행 - CPU 사용 시간이 가장 짧은 프로세스부터 처리하는 스케줄링 방식     * 라운드 로빈 스케줄링 (RR) = round robin - 선입 선처리 스케줄링 + 타임 슬라이스 - 타임 슬라이스 (time slice): 각.. 2025. 3. 16.
[OS] 큐(준비 큐, 대기 큐), CPU 스케줄링(선점형, 비선점형) 2025. 3. 15.
[Python] 프로세스, 스레드 조작 * 부모 프로세스, 자식 프로세스 관계 PID로 확인123456789101112from multiprocessing import Processimport os def foo():    print('foo: child process: ', os.getpid())    print('foo: parent process: ', os.getppid()) if __name__ == '__main__':    print('parent process', os.getpid())    child1 = Process(target=foo).start()    child2 = Process(target=foo).start()    child3 = Process(target=foo).start()  * 멀티 프로세스 구현1234.. 2025. 3. 14.
[OS] 멀티 프로세스, 멀티 스레드 하나의 프로세스를 동시에 쓰레드 개수만큼 병행해서 실행할 수 있다.스레드 구성 요소: 스레드 ID, 프로그램 카운터를 비롯한 레지스터 값, 스택 등 (실행에 필요한 최소한의 정보를 유지하며 실행됨.) 프로세스를 이루는 모든 스레드들은 프로세스의 자원을 "공유"하면서 실행된다. 스레드 1,2,3은 모두 똑같은 코드, 데이터, 힙 영역을 공유함. 스택 영역은 각각 독립적으로 공간을 가짐. * 리눅스 토발즈는 프로세스와 스레드를 굳이 구분할 필요가 없다고 설명함. 프로세스와 스레드는 "실행의 문맥"일 뿐이며 그냥 하나라고 보면 된다고 답변함. * 리눅스 운영체제에서는 프로세스와 스레드를 구분해서 쓰지않고 task 라는 용어를 사용함.* 요즘 운영체제에서는 CPU한테 처리해야 될 작업을 전달할 때 프로세스 단.. 2025. 3. 14.
[OS] 프로세스 상태와 계층 구조, 프로세스 생성 기법 * 생성 상태 - 운영체제를 통해 이제 막 메모리에 적재되어 PCB를 할당 받은 상태 - 준비가 완료되었다면 준비 상태로 변경됨. * 준비 상태 - 당장이라도 CPU를 할당 받아 실행할 수 있지만 자신의 차례가 아니기에 기다리는 상태 - 자신의 차례가 된다면 실행 상태로 변경 (=디스패치) * 실행 상태 - CPU를 할당 받아 실행 중인 상태 - 할당된 시간 모두 사용 시(타이머 인터럽트 발생 시) 준비 상태로 변경됨. - 실행 도중 입출력장치를 사용하면 입출력 작업이 끝날 때까지 대기 상태로 변경됨. * 대기 상태 - 프로세스가 실행 도중 입출력장치를 사용하는 경우 - 입출력 작업은 CPU에 비해 느리기에 이 경우 대기 상태로 접어듬. -> 입출력 작업은 처리가 느리니까 CPU를 다른 프로세스가 .. 2025. 3. 14.
[OS] 프로세스, 프로세스 제어 블록, 메모리 영역 프로그램은 실행되기 전까지는 보조기억장치에 있는 "데이터 덩어리"일 뿐이지만 보조기억장치에 저장된 프로그램을 실행하기 위해 더블클릭 등 행동을 해서 메모리에 적재하고 실행하는 순간부터 그 프로그램은 "프로세스"가 된다.= "프로세스 생성" 과정 프로세스 종류 1) 포그라운드 프로세스(foreground process): 사용자가 볼 수 있는 공간에서 실행되는 프로세스 ex) 게임, 메모장 2) 백그라운드 프로세스(background process): 사용자가 볼 수 없는 공간에서 실행되는 프로세스       2-1) 사용자와 직접 상호작용이 가능한 백그라운드 프로세스      2-2) 사용자와 상호작용하지 않고 그저 정해진 일만 수행하는 프로세스  ex) daemon, service모든 프로세스는 실행을.. 2025. 3. 14.