2024/01 10

24. Device Drivers

하드디스크 드라이버는 하드디스크라는 I/O 디바이스를 구동하는 시스템 소프트웨어(펌웨어)입니다. 드라이버는 OS의 한 부분으로 애플리케이션과 I/O 디바이스 사이에 존재하며 애플리케이션이 I/O 디바이스를 사용할 수 있게 도와줍니다. 그래서 디바이스 드라이버는 I/O 컨트롤러에 있는 레지스터를 읽고 쓰는 코드로 이루어져 있습니다. 추가적으로 I/O 컨트롤러가 I/O 오퍼레이션이 종료되었을 때 CPU하게 이슈하는 인터럽트 서비스 루틴도 들어있습니다. UNIX OS를 통해서 어떻게 I/O 디바이스을 구별하고 디바이스 드라이버 루틴을 찾아 호출할 수 있는지 알아보겠습니다. 우선 I/O 디바이스를 파일 형태로 이름을 붙여 구별을 합니다. 이 디바이스 파일에 어떤 정보가 들어있는지 알아보기 위해서 dev 디렉터리..

CS/Operating System 2024.01.31

23. I/O Device 관리

PC 내부에는 다음과 같은 메인보드에 CPU, memory, hard disk drive 등의 다양한 I/O 디바이스가 있습니다. 이런 디바이스들을 전부 I/O bus에 연결되어 있습니다. I/O bus와 I/O 디바이스 사이에는 I/O controller가 존재하며 CPU로부터 받은 I/O instruction을 수행합니다. I/O controller는 I/O bus에 인터페이스 하기 위한 bus interface logic을 가지고 있고 I/O 디바이스를 제어하기 위한 인터페이스도 가지고 있습니다. 그리고 내부에 레지스터들이 들어 있는데 이 레지스터는 데이터 레지스터와 컨트롤 레지스터로 나뉩니다. 데이터 레지스터에는 디바이스로부터 읽어온 정보를 저장하는 input data register와 출력할 정..

CS/Operating System 2024.01.30

22. Trends in Memory Management

OS는 대부분 high level language로 구현되어 있으며 OS가 포팅된 하드웨어와 무관하게 구현될 수 있지만 반대로 타겟 하드웨어 특성에 굉장히 민감한 부분도 존재합니다. 이 부분은 context switching을 담당하는 부분입니다. context switching은 CPU에 있는 레지스터들의 속성을 이용해서 조정하는 일들을 많이 진행하기 때문에 그렇습니다. MMU라는 하드웨어를 기반으로 동작을 하는 Memory manageement 부분도 하드웨어와 밀접하게 관련이 있는 부분입니다. 그렇기에 하드웨어가 발전하게 되면 OS의 memory management 부분도 같이 변화해야 합니다. 페이징 매커니즘을 공부하면서 몇 가지 단점에 대해서도 알아봤습니다. 메모리 액세스의 성능이 저하되는 문제..

CS/Operating System 2024.01.29

21. Trashing and Working set

컴퓨터 시스템이 감당할 수 있는 양보다 더 많은 양의 워크로드를 돌릴 경우 성능 저하를 피할 수 없습니다. 이 성능 저하는 프로세스 개수에 비례해서 linear 하게 나빠지는 것이 아닌 어느 시점에서 급격한 성능 저하가 발생하게 되는데 이것을 쓰레싱(Thrashing)이라고 부릅니다. 쓰레싱이 생기는 이유는 페이지 프레임의 개수는 적은데 프로세스들이 더 많은 페이지를 자주 사용하면서 발생합니다. 공간이 좁기 때문에 가까운 미래에 사용할 페이지를 쫓아내고 자리를 만든 다음 페이지 폴트가 발생해 페이지를 들고 오는 것이 반복되어 page fault rate가 증가하게 됩니다. 이러면 메모리가 아닌 swap area에 액세스해서 페이지를 가지고 오는데 이 속도가 너무 느리기 때문에 버츄얼 메모리의 이점을 살리..

CS/Operating System 2024.01.27

20. Demand Paging

virtual memory management는 디멘드 페이징(Demand paging)을 합니다. 디멘드 페이징은 위와 같은 4가지 정책(policy)을 따릅니다. page selection은 페이지 폴트가 발생했을 때 요청된 페이지만 읽어오는 것이 아니라 locality를 생각해 주변에 있는 페이지까지 읽어오는 것을 고려합니다. page replacement는 새로운 페이지를 메모리에 적재할 때 메인 메모리에 사용할 수 있는 페이지 프레임이 없다면 다른 프로세스의 페이지를 뺏어와야 하는데 수많은 페이지 프레임에서 어떤 것을 뺏어올지 결정해줍니다. page frame allocation은 같은 page frame pool에서 페이지 프레임을 할당하는 global allocation을 할지 아니면 프로세..

CS/Operating System 2024.01.26

1. Introduction to System Programming

- 이 포스터는 KOCW에서 제공되는 남해운 교수님의 시스템 프로그래밍의 기초를 바탕으로 작성되었습니다. 컴퓨터 시스템 3가지로 구성되어 있습니다. 컴퓨터 하드웨어를 기반으로 OS가 그 위에서 동작하며 마지막 위에는 우리가 사용하기 원하는 응용 프로그램들을 실행하게 됩니다. 임베디드 시스템의 경우 임베디드 하드웨어와 임베디드를 위한 OS를 사용하는 것을 제외하고는 비슷한 양상을 보입니다. 컴퓨터 시스템의 내부 구조를 더 자세히 알아보겠습니다. 하드웨어 부분에는 CPU와 I/O 디바이스, 보조기억장치, 주기억장치가 존재합니다. 이 하드웨어 위에 OS가 존재하는데 이때 하드웨어와 가장 처음에 맡닫는 부분을 Archtecture dependent kernel이라고 부릅니다. 32bit인지 64bit인지, CP..

19. Memory Management Mechanism

페이징 메커니즘은 현대 OS의 메모리 관리 기법을 구현하기 위한 핵심적인 메커니즘입니다. 이번에는 페이징 기법을 통해서 프로세스의 메모리를 효율적으로 관리하는 정책에 대해 알아보겠습니다. 프로세스 스케줄러를 설계할 때 정책과 메커니즘을 구별해서 설계해야 합니다. 어플리케이션 마다 사용하는 스케줄러 정책이 다를 수는 있지만 context switching 메커니즘은 동일하게 동작해야 합니다. OS의 메모리 관리 부분도 동일하게 적용되는데 이때 페이징 기법이 바로 메커니즘이 됩니다. 페이징 기법은 MMU라는 매핑 하드웨어로 페이지 테이블이라는 매핑 정보를 통해 CPU가 이슈한 로지컬 어드레스를 실제 피지컬 메모리 주소인 피지컬 어드레스로 변환을 해줍니다. 이렇게 매핑 하드웨어와 매핑 테이블 전체를 매핑 메커..

CS/Operating System 2024.01.25

18. Enhancing Mechanisms

segmentation, paged segmentation 이렇게 메모리 관리 기법에 대해 공부했지만 이 방법들은 현재 OS에서 사용하지 않는 방법입니다. 현대 OS는 페이징(paging) 만을 사용해서 메모리를 관리하는데 이때 사용하는 메커니즘들에 대해서 알아보겠습니다. 페이징은 굉장히 좋은 메모리 관리 기법이지만 메모리 액세스를 할 때마다 메인 메모리에 있는 페이지 테이블을 사용한다는 점과 페이지의 크기가 작고 로지컬 어드레스 스페이스가 크기 때문에 페이지의 개수가 많아지는 문제가 존재했습니다. 추가적인 메모리 레퍼런스를 한 번 더하는 문제와 페이지 테이블의 사이즈가 커져 메인 메모리에 자리를 많이 차지하는 문제가 존재 (slow memory access, large page table) Slow m..

CS/Operating System 2024.01.24

17. Paged segmentation

페이징은 fragmentation 문제를 해결할 수 있지만 page table의 오버헤드가 굉장히 커진다는 점과 segmentation과 유사하게 메모리를 access 할 때 추가적인 access가 필요하여 성능이 저하되는 문제가 있었습니다. 페이징만 적용한다면 프로세스 당 하나의 세그먼트밖에 없는 상태로 code sharing과 맞춤 protection이 불가능합니다. paged segmentation은 조금 복잡합니다. segmentation을 기반으로 하면서 paging을 더한 기법으로 프로세스가 여러 개의 세그먼트를 가지며 각각에 세그먼트에 페이징을 적용한다고 생각하시면 됩니다. 그래서 프로세스가 address translation을 하려면 세그먼트마다 별도의 segment table이 필요합니다..

CS/Operating System 2024.01.23

16. Segmentation

segmentation이란 하나의 프로세스가 여러 메모리 청크를 할당받아 작업하는 것을 의미합니다. 초창기 job의 경우 하나의 메모리 청크만을 할당받고 실행되었지만 메모리 청크 하나만을 할당받으면 여러 문제가 생깁니다. code 부분에 속하는 메모리의 경우 read operation만 실행하지만 data에 속하는 메모리의 경우 read와 write operation을 제공해야 합니다. (성격이 다른 두 메모리가 합쳐진 상태) code sharing 부분에서도 문제가 발생합니다. 여러 프로세스가 동일한 exe 파일을 실행할 때 코드를 공유할 때 메모리 영역이 하나의 청크로만 구성되어 있다면 공유할 수 없는 힙과 스택 그리고 공유가 가능한 코드 영역이 합쳐져 있어서 코드를 공유하지 못합니다. (코드와 he..

CS/Operating System 2024.01.10
반응형