본문 바로가기

OS10

[OS] 페이지 교체 알고리즘 페이지 부재 발생 → 새로운 페이지를 할당해야 함 → 현재 할당된 페이지 중 어떤 것 교체할 지 결정하는 방법 Demanding Paging은 요구되어지는 페이지만 backing store에서 가져온다. 하지만 프로그램들이 계속 실행함에 따라 요구 페이지도 계속 늘어나고, 언젠가는 메모리가 가득 차게 될 것이다.(memory full) 여기서 다른 프로그램이 새로 실행되거나 실행중인 프로세스가 다른 페이지를 요구한다면 이미 메모리에 있는 페이지 중 하나를 다시 backing store에 보내고(page-out), 새로운 페이지를 메모리에 올려야한다.(page-in) 이를 페이지 교체라고 한다. 여기서 backing store로 page-out이 된 페이지를 victim page라고 한다. 요구 페이징(D.. 2021. 10. 13.
[OS] 페이징 & 세그먼테이션 Paging vs Segmentation 가상 메모리를 관리하는 기법 가상 메모리는 메모리에 로드된 즉, 실행중인 프로세스가 가상의 공간을 참조하여 마치 커다란 물리 메모리를 갖고 있는 것처럼 사용할 수 있도록 하는 것이다. 간단하게 말해 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식이다. 가상 메모리는 각 프로세스당 메인 메모리와 동일한 크기로 하나씩 할당된다. 그 공간은 보조기억장치 공간을 이용한다. 프로세스의 일부만 메모리에 로드하고 나머지는 보조기억장치에 두는 형태이다. 이렇게 할당되면 메모리 관리 장치(MMU : memory management unit)에 의해 물리 주소로 변환되어 사용자가 메모리 맵핑이 어떻게 되는지 의식할 필요 없이 알아서 가상 메모리를 활용하여 작업한다. 내부 .. 2021. 10. 13.
[OS] 프로세스 주소 공간 Code(Text) 우리가 작성한 소스코드가 들어 가는 부분. 즉, 실행할 프로그램의 코드가 저장되는 영역으로 텍스트(code)영역 이라고도 부른다. 코드영역은 실행 파일을 구성하는 명령어들이 올라가는 메모리 영역으로 함수, 제어문, 상수 등 함수에 대한 기계어 코드가 여기에 지정된다. 컴파일 타임에 결정되고 중간에 코드를 바꿀 수 없게 Read-Only 로 지정돼있다. Data 프로그램의 초기값 있는 전역 변수, 배열, 정적(static) 변수가 저장되는 영역이다. 즉, 프로그램이 구동되는 동안 항상 접근 가능한 변수가 저장되는 영역이다. 전역변수, static 값을 참조한 코드는 컴파일 하고 나면 Data 영역의 주소값을 가르키도록 바뀐다. 데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 .. 2021. 8. 23.
[OS] 인터럽트 운영체제와 하드웨어 간의 상호동작(폴링) 운영체제는 레지스터(상태, 명령, 데이터 레지스터)를 읽고 쓰는 것을 통해 하드웨어 장치의 동작을 제어할 수 있게 된다. 상태(Status) : 하드웨어 장치의 현재 상태를 읽을 수 있는 레지스터 명령(Command) : 하드웨어 장치가 특정 동작을 하도록 요청할 때 사용 데이터(Data) : 하드웨어 장치에 데이터를 보내거나 받거나 할 때 사용 운영체제와 하드웨어 장치 간에 폴링을 통한 상호작용은 다음과 같다. 폴링(Polling)을 한다. 폴링(Polling) : 운영체제가 하드웨어 장치의 상태 레지스터를 읽음으로써 명령의 수신 여부를 주기적으로 확인하는 것이다. 즉, 하드웨어장치의 상태를 수시로 체크하여 명령을 받을 수 있는지 확인하는 것을 말한다. 운영체제.. 2021. 8. 23.
[OS] 프로세스 vs 스레드 프로그램 프로그램이란, 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태를 말한다. 프로세스 메모리에 적재되어 실행되고 있는 프로그램의 인스턴스(독립적인 개체) 프로그램 : 어떤 작업을 위해 실행할 수 있는 파일 운영체제로부터 자원을 할당받은 작업의 단위 특징 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다. 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다. 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다. 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)을 사용해야.. 2021. 8. 18.
[OS] 스케줄러의 종류: 장기, 중기, 단기 스케줄러 장기 스케줄러(long term scheduler) 어떤 프로세스를 준비큐에 넣을 것인가 결정 작업 스케줄러라고도 부르며 어떤 프로세스를 준비큐에 삽입할지를 결정하는 역할을 한다. 디스크에서 하나의 프로그램을 가져와 커널에 등록하면 프로세스가 되는데 이때 디스크에서 어떤 프로그램을 가져와 커널에 등록할지(준비큐에 등록할지) 결정한다. 장기 스케줄러는 수십 초 내지 수 분 단위로 가끔 호출되기 때문에 상대적으로 속도가 느린 것이 허용됩니다. 또한 장기 스케줄러는 메모리에 동시에 올라가 있는 프로세스의 수를 조절하는 역할을 한다. 하지만 현대의 시분할 시스템에서 사용되는 운영 체제에는 일반적으로 장기 스케줄러를 두지 않는 경우가 대부분이다. 과거에는 적은 양의 메모리를 많은 프로세스들에게 할당하면 프로세스당.. 2021. 8. 4.
[OS] 블럭/논블럭, 동기/비동기 블럭 / 논블럭 함수 호출에 대한 이야기 기술적으로 명확히 구분된다. 블록 함수 A를 호출했을 때, 함수 A의 수행이 모두 끝날 때 까지 기다린다(블록). 함수A의 수행이 모두 끝나고 리턴되면, 함수A를 호출한 부분의 다음 부분부터 이어서 실행한다. 논블록 함수A를 호출했을 때, 함수A의 실행을 요청하고 바로 리턴된다(논블록). 동기 / 비동기 행위에 대한 이야기이다. 기술적으로 구분되지 않는다. 추상적인 구분이다. 작업A와 작업B가 있다고 하자. 동기 작업A가 먼저 모두 처리되고 나서 작업 B가 처리되기 시작하면(하나씩 순차적으로 처리되면) 동기이다. 작업A가 작업B를 관찰하는 작업이라면, 작업A와 작업B가 동시에 처리되더라도 동기이다. (여기서 작업A와 작업B를 서로 바꾸어 생각해도 똑같다.) '관찰.. 2021. 7. 28.
[OS] 프로세스 간 통신 방법(Inter Process Communication, IPC) 개념 프로세스들 간의 의사소통하는 것을 IPC라고 한다. 프로세스가 통신 가능하다는 것은 서로 다른 프로세스가 데이터를 주고 받을 수 있다는 것이며, 동시에 접근 가능한 메모리 즉, 프로세스들이 공유하는 메모리가 필요하다는 뜻이다. 따라서 컴퓨터 내부에서 보다 효율적으로 정보를 주고 받기 위한 통신의 일종이라고 생각하면 되고, 인터넷 통신을 IPC의 확장으로 이해할 수 있다. (프로세스간 통신이 서버-클라이언트 간 통신과 유사하기 때문) 프로세스간 통신을 위해 '파이프'와 같은 개념이 등장하게 되었다. 💡 스레드 간 통신보다 프로세스 간 통신이 어려운 이유 프로세스와 스레드의 차이를 알고 있다면 이해하기 쉽다. 우리는 fork와 같은 함수로 프로세스를 pthread_create와 같은 함수로 쓰레드를 각.. 2021. 5. 2.
[OS] 스레드 이 글은 '그림으로 배우는 구조와 원리 운영체제' 개정3판을 참고하여 작성하였습니다. 첨부된 이미지는 책을 기반으로 직접 제작했습니다. 목차 1. 스레드의 개념과 상태 변화 개념 스레드의 주소 공간 단일 스레드와 다중 스레드 스레드의 상태 변화 스레드의 제어 블록 2. 스레드의 구현 사용자 수준 스레드 커널 수준 스레드 혼합형 스레드 1. 스레드의 개념과 상태 변화 개념 지금까지 살펴본 프로세스는 두 가지 특성인 자원과 제어로 구분할 수 있다. 이 중 제어만 분리한 실행 단위를 스레드(thread)라고 하는데, 프로세스 하나는 스레드 한 개 이상으로 나눌 수 있다. 스레드들은 프로세스의 직접 실행 정보를 제외한 나머지 프로세스 관리 정보를 공유한다. 프로그램 카운터(PC)와 스택 포인터(SP)등을 비롯한.. 2021. 4. 4.