https://github.com/remzi-arpacidusseau/ostep-translations/tree/master/korean
ostep-translations/korean at master · remzi-arpacidusseau/ostep-translations
Various translations of OSTEP can be found here. Help the cause and contribute! - remzi-arpacidusseau/ostep-translations
github.com
비전공자 개발자로써 기본이 부족하다고 생각이들어 일하면서 CS공부를 하고있다.
네트워크 하향식 접근 , OSTEP 등 기본을 탄탄히 가져가려고한다.
읽다보니 살짝 힘에 부친다...
지금 어느정도 아니깐 어느정도 읽지 예전에 제로베이스 나라면 절대 못읽었을거같다.
정처기때 공부했던 지식들이 여기에 발하는거같다...
4 Processes 정리
운영 체제 프로세스 개념
일반적인 프로세스는 실행중인프로그램으로 정의함
CPU가 여러개 존재한다는 환상을 어떻게 제공 하는가?
적은 개수의 CPU밖에없는데 OS는 어떻게 거의 무한개에 가까운 CPU가 있는듯한 환상을 만들수 있나
운영체제는 CPU를 가상화하여 이러한 환상을 만든다.
시분할 기법으로 원하는 수 만큼 프로세스를 동시에 실행할 수 있게 한다.
CPU에서 프로그램 실행을 잠시 중단하고 다른 프로그램을 context swich(문맥 교환)이라고 한다.
운영체제의 지능은 정책(Policy)의 형태로 표현됨.
정책은 운영체제 내에서 어떤 결정을 내리기위한 알고리즘이다.
프로세스는 실행 중인 프로그램이다.
프로그램이 실행되는 동안 하드웨어 상태를 읽거나 갱신할 수 있다.
이때 가장 중요한 하드웨어 요소가 메모리이다.
명령어는 메모리에 저장되고 실행 프로그램이 읽고쓰는 데이터 역시 메모리에 저장된다.
프로세스가 접근할 수 있는 메모리(주소 공간(address space)는 프로세스를 구성하는 요소이다.
레지스터도 프로세스의 하드웨어 상태를 구성하는 요소 중 하나이다.
프로세스를 실행하는데 레지스터도 빠질수 없다 .
많은 운영체제에서 공통된 설계 패러다임은 고수준 정책을 저수준 기법으로 부터 분리하는것이다.
기법은 시스템에 관한 "어떻게"라는 질문에 답을 제공하는것이다.
예로 운영체제는 어떻게 문맥교환을 하는가? 등이 있다.
운영체제가 반드시 API로 제공해야하는 몇몇 기본 기능이 있다.
생성, 제거, 대기 , 각종 제어, 상태 이다.
프로그램이 어떻게 프로세스로 변형되는가?
첫번째 작업은 프로그램 코드와 정적데이터(예를 들어 초기값을 가지는 변수)를 메모리, 프로세스의 주소 공간에 탑재(load)하는것. 프로그램은 디스크(hdd or ssd)에 특정 실행 파일 형식으로 존재한다.
코드와 정적 데이터를 메모리에 탑재하기위해서는 운영체제는 디스크의 해당 바이트를 읽어 메모리 어딘가에 저장해야한다.
어떤 프로그램이든 실행시키기 전에 운영체제는 프로그램의 중요 부분을 디스크에서 메모리로 탑재해야한다.
탑재 이후 프로세스를 실행시키 전 운영체제는 일정량의 메모리가 프로그램의 실행 시간 스택(stack) 용도로 할당되어야한다. C 프로그램에서는 지역변수 , 함수 인자, 리턴주소 등을 저장하기위해 스택을 사용한다.
운영체제는 스택을 주어진 인자로 초기화한다. main() 함수의 인자인 argc와 argv 벡터를 사용하여 스택을 초기화한다.
운영체제는 프로그램의 힙(heap)을 위한 메모리 영역을 할당한다.
C프로그램에서 힙은 동적으로 할당된 데이터를 저장하기 위해 사용된다.
malloc 을 호출해 필요한 공간을 요청, free()를 호출해 사용했떤 공간을 반환해 다른 프로그램이 사용할 수 있도록 한다.
힙은 연결 리스트, 해시 테이블, 트리 등 크기가 가변적인 자료구조를 위해 사용된다.
프로그램이 실행되면 malloc() 라이브러리 API를 호출해 메모리를 요청, 운영체제가 이를 충족하도록 메모리를 할당한다.
운영체제는 또 입출력과 관계된 초기화 작업을 수행한다.
코드와 정적 데이터를 메모리에 탑재, 스택과 힙을 생성하고 초기화하고 , 입출력 셋업과 관계된 다른 작업을 마치게되면, 운영체제는 프로그램 실행을 위한 준비를 마치게된다.
프로세스 상태
프로세스 상태를 단순화 하면 다음과 같다.
실행, 준비 , 대기
실행 상태에서 준비 상태로의 전이는 프로세스가 나중에 다시 스케줄 될 수 있는 상태가 되었다는 것을 의미.
프로세스가 입출력 요청 등의 이유로 대기 상태가 되면 요청 완료 등의 이벤트가 발생할 때까지
대기 상태로 유지된다.
이벤트가 발생하면 프로세스는 다시 준비 상태로 전이되고 운영체제의 결정에 따라 바로 다시 실행될 수 있다.
자료 구조
운영체제도 일종의 프로그램이다. 다른 프로그램과 같이 다양한 정보를 유지하기 위한 자료 구조를 가지고있다. 예를들어 준비 상태의 프로세스들을 위한 프로세스 리스트와 같은 자료 구조를 유지한다.
레지스터 문맥 자료구조는 프로세스가 중단 되었을 때 해당 프로세스의 레지터값들을 저장한다.
이 레지스터값들을 복원하여 운영체제는 프로세스 실행을 재개한다.
실행,준비,대기 외에 다른 상태들이 존재하는 것을 볼수있는데 초기 상태를 가지는 시스템도 있다.
프로세스가 생성되는 동안에는 초기 상태에 머무른다.
프로세스는 종료되었지만 메모리에 남아있는 상태인 최종(final)상태도 있다.
유닉스 기반에서는 좀비 상태라고 불린다.
이상태는 프로세스가 성공적으로 실행했는지를 다른 프로세스(보통 부모 프로세스)가 검사하는데 유용하다. 이를 위해 최종상태를 활용한다. 프로세스가 성공적으로 종료되면 0을 , 그렇지 않으면 0이 아닌값을 반환)
부모 프로세스는 자식 프로세스의 종료를 대기하는 시스템 콜을 호춯해(예, wait()) 한다.
이 호출은 종료된 프로세스와 관련된 자원들을 정리할 수 있다고 운영체제에 알리는 역할도 한다.
요약
프로세스는 간단히 말하면 실행중인 프로그램.
앞으로 더나아가 핵심 사항은 프로세스 구현에 필요한 기법, 구현한 프로세스를 스케쥴링하는 정책
등을 뜻함.
이러한 여러 방법들을 조합해 운영체제가 CPU를 가상화하는 방식을 이해해야한다.
'CS' 카테고리의 다른 글
| 네트워크 구조 원리 - 1 - (0) | 2026.02.01 |
|---|---|
| OSTEP STUDY - 프로세스 API ( fork 시스템콜) (0) | 2025.11.12 |
| naver 를 치면 무슨 일이 일어날까? (0) | 2024.08.14 |
| 네트워크 기초 2 (0) | 2024.08.14 |
| 컴퓨터 네트워킹 기초 (0) | 2024.08.13 |
주니어 모코코 개발자
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!