본문 바로가기

컴퓨터 공학 전공

(12)
Process Synchronization (1) Synchronization (동기화) 여러 프로세스가 협업할 수 있도록 하는 수단 공유되는 자원들을 적절하게 조정함으로써 협동할 수 있도록 한다 e.g. variables, files 정확성을 위해서 필요 각각의 프로세스들은 얽혀 있지만 독립적으로 작동 (속도 예측 불가) CPU 스케줄링은 OS 관할이라 프로그래머가 어떻게 동작할지 예상하지 않는다 여러 프로세스들이 실행되는 환경에서 의도대로 동작시키기 위해 프로세스뿐만 아니라 스레드도 해당 Synchronization problem 동기화를 시키지 않으면 많은 문제가 발생하지만 일단 대표적인 예를 들어보려 한다. 1. 현금 인출 두 개의 프로세스가 현금을 인출하는 상황이다. balance가 100만 원이고 account가 10만 원이라 가정해보자. 1..
CPU Scheduling CPU Scheduling: runnable processes 중에 누가 다음 순서로 실행될지를 결정하는 것 Scheduling algorithm의 목표 모든 시스템 No starvation 우선순위에 비례한 Fairness: 각각의 프로세스에 우선순위에 맞게 CPU 자원을 공유 Balance: 시스템의 모든 part들이 바쁘게 움직이도록 유지 Batch 시스템 Throughput: 시간당 처리하는 job 수가 최대 Turnaround time: 작업 처리 소요 시간이 최소 CPU utilization: CPU가 항상 유의미한 작업을 실행 Interactive 시스템 Response time: 요청에 가능한 한 빨리 응답 Proportionality: 사용자들의 기대에 충족 Real-time 시스템 Me..
Thread Thread가 떠오른 배경 프로세스는 너무 무겁다 각각의 프로세스는 address space를 가져서 code와 data를 따로 차지한다 OS 자원과 정보 Hardware State 프로세스를 구성하기 위한 공간과 data structure가 필요하기 때문에 새로운 프로세스를 생성하는 비용이 너무 비싸다 OS를 거쳐서 IPC를 하는 비용이 너무 비싸다 위와 같은 치명적인 이유들로 Thread가 부상되었고 다음의 특징을 가진다 code와 data 영역을 공유한다 같은 권한을 가진다 자원들을 공유한다 자신만의 hardware state를 가진다 프로세스가 모든 자원과 공간을 독립적으로 가지고 있는 개체라고 한다면 스레드는 공통된 부분은 공유하고 필요한 부분만 독립적으로 구성되어있다. Process vs. T..
Process ※ 운영체제 정리에 앞서 정리한 자료는 한국외대 컴퓨터전자시스템공학부 이윤석 교수님의 수업 자료를 참고하였음을 밝힌다. 1. 프로세스란 무엇인가? 실행 중인 프로그램 실행과 스케줄링의 기본 단위 각각의 프로세스는 고유한 id를 가지고 있어서 그것으로 구분한다 (pid) 각 프로세스가 소유하고 있는 것: CPU contexts (registers) OS resources (memory, open files, etc.) Other information (PID, state, owner, group, etc.) 각 프로세스는 그들 자신만의 address space와 open files, virtual CPU를 가져서 독립적으로 작동한다. 2. Process Address Space 위의 그림은 우리가 흔히 프..
Network 네트워크 프로그래밍에 대해서 자세하게 소개를 하는 것은 시스템 프로그래밍을 정리하는 목적에서 볼 때 배보다 배꼽이 더 클 수 있으므로 간략하게 소개해보려 한다. 네트워킹을 위해서는 client와 server process가 필요하다. server는 client의 연결을 항상 기다리고 있고 client가 요청하여서 연결이 되었을 때에 비로소 네트워킹이 동작하게 된다. Target address가 알맞은 프로세스 or 스레드에 갈 수 있도록 해주는 것이 바로 IP 주소와 Port #이다. 먼저 이 패킷은 IP 주소를 통해 node에 도착하게 되고 그 node 안에서 Port #를 통해 적절한 프로세스 or 스레드로 가는 것이다. 이 과정을 도식화한 것이 아래의 그림이다. IP 주소와 Port #를 통해 알맞..
time management 프로그램에서 time은 크게 calendar time과 Process/CPU time으로 나뉜다. 1. Calendar time UTC (Coordinated Universal Time) / GMT (Greenwich Mean Time): 세계 공통으로 기준이 되는 시간 Epoch time: 1970년 1월 1일 00시 00분 00초를 기점으로 하여 몇 초가 지났는지를 나타낸다 2.Process/CPU time 1 tick = 1 ms or 10 ms time = 프로그램이 얼마나 실행되었는지를 쉘에서 보여주는 초 단위의 시간 time과 관련된 함수들을 소개해보겠다. time_t time (time_t *tloc) tloc: epoch time이 들어간다 정상적인 경우 현재 epoch time이 반환되고..
Memory Mapped File Memory Mapped File은 File에 해당하는 공간을 Process address space에 mapping 시키는 것을 말한다. 여러 프로세스에 같은 file을 mapping 시켰을 경우 Inter-process communication이 가능하다. caddr_t mmap (caddr_t addr, size_t len, int prot, int flags, int fildes, off_t off) addr: file의 시작 부분의 메모리 주소 len: mapping되는 size prot: 권한을 부여할 수 있다 flags: mapping되는 방식으로 나중에 자세히 다룰 것이다 fildes: mapping되는 file의 descriptor off: file 안에서 mapping이 시작되는 곳까지..
IPC IPC는 Inter Process Communication의 약자로, 프로세스 간 통신을 뜻한다. 앞서 살펴봤듯이, Pipe 외에도 많은 방법들이 존재한다. 이번 게시글에서는 IPC의 수단들을 구체적으로 다뤄보려고 한다. Message Queue 구조는 위와 같은 형태이다. 언뜻 보면 pipe와 비슷하다고 생각할 수 있다. 허나 중요한 차이점은 위와 같은 구조가 pipe는 데이터의 흐름이라면 message queue는 메모리 공간에 존재한다는 것이다. 또한, 두 프로세스 간이 아닌 여러 프로세스들이 활용할 수 있다. message queue를 사용하기 위해 쓰이는 함수들은 다음과 같다. int msgget (key_t key, int msgflg) key에는 message queue의 key가 들어간다,..