Developer/OS

· Developer/OS
Why 가상메모리? - 가상메모리를 쓰는 이유는 보통 다음과 같은 예시로 들 수 있다. 책을 프로세스의 메모리라 하고, 책상 위에 둘 수 있는 최대 한계치를 실제 메모리라고 가정해보자. 공부할게 너무 많아져서 책이 책상에 둘 수 없는 상태가 오게 될 수 있다. 하지만, 책장이라는 가상 메모리를 사용하면 필요할 때 적재적소에 책상위에 책을 둘 수 있다!!! * 하지만, " 책을 딱 맞게 사면 되지 않냐? " 라는 질문이 있을 수 있다. 우리가, 알고리즘을 공부할 때, 책 한권으로 끝낸 적이 있는가? 보통 공부할 때, 온라인 검색을 통해서 책을 찾아보고, 소스코드만 구현된 책도 따로 찾아보고, 적용된 사례에 대한 책도 찾아본다. * 그래서 공부할 때 항상 모든 책을 같이 보는가 ? -> 절대 아니다 실습이 ..
· Developer/OS
프로세스? - 프로세스를 구동하기 위해서는 다양한 자원이 필요하다. - 이에 대한 효율적인 배분을 위해서 상황에 맞는 자원을 각각의 프로세스에게 분배할 필요가 있다. - 그러면 이러한 효율적인 배분이 왜 필요한 것일까? - 효율적인 배분이 필요한 이유는 프로세스의 Waiting 상태가 존재하기 때문이다. - Waiting 상태의 프로세스에게 자원을 배분하면, 낭비가 이루어지기 때문에 이를 효율적으로 관리하기 위해 스케줄링을 하는 것이다! - 결국, "어떻게 프로세스들이 CPU를 효율적으로 사용할 것인가? " 에 대한 답을 끌어내기 위해서다 CPU 스케줄링이 일어나는 시점 º Running 상태에서 Waiting 상태로 전환 되었을 때 º Running 상태에서 Ready 상태로 전환 되었을 때 º Wai..
· Developer/OS
Virtual Memory프로그램을 만들 때 한정된 메모리의 크기를 고려해야 된다면, 프로그래머에게 굉장한 부담으로 다가온다.이를 해결하기 위해, 프로그램의 메모리 크기를 크게 지정하여 주소로 배분하는 방식이다.∴ 중요한 것은 가상메모리와 실제 메모리 사이의 Mapping 기법이 중요!!!Page Table위에서 말한 Mapping 작업을 진행하기 위해서는 Page Table이 필요하다. Frame Valid 보통은 Frame에 들어있는 자료가 실제 메모리가 올라온 상태고, valid는 비트는 메모리가 올라와 있는지 아닌지 나타내주는 상태비트이다. ▶ Page Table 크기 구하는 방법◀ 1개의 Page크기 = 4Kbyte컴퓨터의 주소공간 크기 = 4Gbyte 일 떄,4..
· Developer/OS
Memory FragmentationRAM에서 메모리의 공간이 작은 조각으로 나뉘어져 사용가능한 메모리가 존재하지만, 할당이 불가능한 상태 ① 내부 단편화(Internal Fragmentation)- 프로세스가 필요한 양보다 더 큰 메모리가 할당되어서 메모리 공간이 낭비되는 상황② 외부 단편화(External Fragmentation)- 작은 메모리가 중간중간에 존재해서 메모리 공간은 충분하지만 실제로 할당할 수 없는 상황 ※ 해결방법(1) 페이징(Paging) : 가상메모리를 통한 외부 단편화 해결 ( 내부 단편화 존재 )-> 사용하지 않는 프레임을 페이지에 옮기고, 필요한 메모리를 페이지 단위로 프레임에 옮기는 기법 used by page table (2) 세그멘테이션(Segmentation) : 가..
· Developer/OS
모니터세마포의 단점을 개선하기 위해 조금 더 캡슐화하여 프로그래머가 정의한 ADTcf> 세마포의 단점?1. wait()가 와야되는데 , signal()이 옴 = 여러 프로세스들이 임계구역에 접근2. signal()이 와야되는데, wait()가 옴 = 교착상태에 빠짐 ● Monitor 구조 예시 12345678class monitor{ public: void procedure(); void function(); private: int count;};cs 하지만, 모니터 역시 세마포와 똑같은 단점들이 존재한다. ○ 프로세스가 자원에 대한 허락을 받지 않고 자원에 엑세스한 경우○ 프로세스가 자원에 대한 허락을 받은 다음 그 자원을 방출하지 않은 경우○ 프로세스가 자원에 대한 허락을 받지 않았는데도 그 자원을 ..
· Developer/OS
공동구역? 프로세스는 여러 가지 쓰레드로 나뉠 수 있다. 여러 개로 나뉘어지는 쓰레드 중에서 자원을 공유할 수 있게 되는데,이에 대한 처리가 너무너무너무너무 중요하다. int a = 2; while(1) {} int b = 3; while(1) {} int c = 4; while(1) {} 쓰레드1 쓰레드2 쓰레드3 프로세스(공유 자원)Critical Area= 임계구역, 각각의 쓰레드가 공통으로 사용하는 프로세스의 자원○ 이에 대한 동기화 작업이 이뤄지지 않으면, 치명적인 결함으로 이루어질 수 있다. 1. Mutual Exclusion(상호 베타) : 데이터는 반드시 한 순간에 하나의 쓰레드만 이용해야 한다.2. Progress(진행) : 쓰레드 사이에서 누가 먼저 접근할 것인가를 정해진 시간내에 결정..
huisam
'Developer/OS' 카테고리의 글 목록