운영체제의 intro를 작성하려고 한다.
먼저 os 운영체제의 주요한 기능은 가상화 이다.
여기서 가상화란 제공된 자원들을 가지고 조금 더 강력하고, 사용하기 쉽도록 변환하는 것이다.
이러한 가상화에 대해서 알아보자
1. 가상화
- cpu 가상화
먼저 위와 같은 코드가 있다고 가정하자, 이 프로그램은 변수가 입력되면, 그것을 무한히 출력시키는 프로그램이다.
이를 실핼시키면 아래와 같이 나오게 된다.
이는 실행 파일을 만들어서 실행시킨 것이다.
하지만 이를 조금 변형해서 백그라운드에서 실행시킨다면 아래와 같이 실행된다.
이를 보면 pi(process id) 가 총 4개가 나온것을 알 수 있는데, 이는 프로세스가 4개임을 알 수 있다. 그런데 cpu 하나에서 하나의 프로세스를 실행시킨다고 한다면 4개의 cpu가 필요할텐데 보통의 컴퓨터는 cpu를 1개에서 2개정도 가지고 있다. 그렇다면 어떻게 4개나 실행 할 수 있을까??
이것이 가능하게 해주는 것이 cpu의 가상화이다.
- 메모리 가상화
먼저 위와 같은 프로그램이 있다고 가정하자. 위의 프로그램은 malloc을 이용해서 heap에 메모리를 할당 받은후에 그 곳의 값을 입력된 값만큼 1씩 증가시키는 것이다.
따라서 위를 실행시키면 아래와 같다.
하지만, 이를 병렬 로 실행시키면 어떻게 될까??
일반적으로는 각각의 프로세스에서 각각의 다른 heap의 주소를 해당 받고 값을 증가시킬것 같지만, 실제로는 아니다 아래외 같이 표현된다.
서로 다른 프로세스인데, 같은 주소값을 할당받은 것이다. 따라서 이것에서 우리는 메모리 또한 가상화 되어 각각의 프로세스가 서로 다른 가상화된 메모리를 사용한다는 것을 알 수 있다.
조금 더 자세히 설명한다면, 두개의 프로세스가 code와 data 부분은 공유하지만, stack 부분은 가상화 시켜서 따로 사용한다.
2. 병렬성
위와 같은 프로그램이 있다고 하자, 위의 프로그램은 입력한 숫자 만큼 counter를 증가시킨다. 이때 counter는 전역변수로 설정되어서 오직 하나만 존재하게 된다. 그리고 volatile을 사용하게 되면, register에 할당되는 것이아닌 바로 메모리에 써진다.
또한 위에서 설며한 것처럼 메모리는 가상화를 하지만, 메모리 중에서 stack 부분을 가상화 하기 때문에 나머지 코드부분과 data부분은 공유를 하게 된다.
따라서 이 프로세스 2개를 동시에 1000번 실행하게 된다면 counter에 2000 이 들어갈 것 갗지만 실제로는 아니다.
그 이유는 counter++ 이 부분 때문인데, 이 부분은 atomic 하게 쪼갤 수 없지 않다. 따라서 이러한 점 때문에 아래와 같이 된다.
3. 영속성
컴퓨터 메모리는 레지스터를 주로 사용하는데, 이는 휘발성이다. 전원을 끄면 사라지게 된다.
따라서 우리는 사라지면 안되는 값들을 지워지지 않는 저장공간에 저장해야하는데, 바로 하드디스크에 저장을 한다.
이때에 저장을 용이 하게 하기 위해서 file system을 구축하여 file의 형식으로 데이터들을 저장하게 된다.
이를 추상화 하여 저장한다는 표현을 쓰는데, 컴퓨터와 연결된 장치들 또한 file처럼 추상화 시켜서 저장한다.
'운영체제' 카테고리의 다른 글
운영체제 MLFQ (0) | 2023.03.11 |
---|---|
운영체제 schedule intro (0) | 2023.03.11 |
운영체제 LDE (0) | 2023.03.11 |
운영체제 process api (0) | 2023.03.11 |
운영체제 process (0) | 2023.03.11 |