CS/운영체제와 시스템
-
시스템 프로그래밍 1주차 1CS/운영체제와 시스템 2021. 8. 5. 18:37
리눅스 기본 구성 모든 것은 파일이라는 철학이 베이스 모든 인터렉션은 파일을 읽고, 쓰는 것처럼 이루어짐 마우스, 키보드와 같은 모든 디바이스 관련된 기술도 파일과 같이 다루어진다 파일 네임스페이스 : 전역 네임스페이스를 제공 예)윈도우에서는 C드라이브 따로 D드라이브 따로 C:/, D:/ 이렇게 제공되나 리눅스에서는 /(최상단 디렉토리)media/floofy/abc.jpg 와 같이 루트 디렉토리부터 시작하는 형식 파일은 inode 고유값과 자료구조에 의해 주요 정보 관리 리눅스 실행 파일 포멧 : ELF(Executable and Linkable Format) 콜스택, 코드(텍스트), 데이터 및 BSS 섹션 등을 정의한 포맷 여러 시스템 리소스와 관려하여, 시스템콜 호출을 통해 리소스 처리 가능함 (타..
-
운영체제 2주차 5CS/운영체제와 시스템 2021. 8. 4. 03:10
파일 시스템 운영체제가 저장매체에 파일을 쓰기 위한 자료구조 또는 알고리즘 블록단위로 관리(보통 4KB), 블록마다 고유 번호를 부여한다 사용자는 추상적 개체인 파일 단위로 관리 파일 시스템의 저장 방법 연속적인 공간에 파일을 저장하는 것이 적절하나, 외부 단편화 문제로 인해 불연속적 공간으로 파일 저장 블록 체인 : 블록을 링크드 리스트로 연결한다. 그러나 끝에 있는 블록을 찾기 위해 맨 처음 블록부터 주소를 따라가야 함 인덱스 블록 기법 : 각 블록에 대한 위치 정보를 기록해서, 한번에 끝 블록을 찾아갈 수 있음 OS별 파일 시스템 윈도우 : FAT, FAT32, NTFS (블록 위치를 FAT 자료구조에 기록) 유닉스 : ext2, ext3, ex4 (인덱스 블록 기법인 inode 방식 사용) 파일 ..
-
운영체제 2주차 4CS/운영체제와 시스템 2021. 7. 29. 18:35
가상 메모리 실제 각 프로세스마다 충분한 메모리를 할당하기에는 메모리 크기의 한계가 존재 ex) 리눅스는 하나의 프로세스가 4GB인데, 실제 물리 메모리는 여러 프로세스에 할당해 주기 위한 메모리 용량이 부족함 가상 메모리를 통해 여러 프로세스가 동시에 실행될 때, 메모리 용량 부족, 프로세스간 메모리 영역 침범 이슈등을 해결 가능함 실제 사용하는 메모리는 각 프로세스당 차지하는 메모리 공간보다 적기 때문에, 이에 착안해서 나온 것이 가상 메모리임 프로세스간 공간을 분리하여, 프로세스 이슈가 전제 시스템에 영향을 주지 않을 수 있음 가상 메모리 기본 개념 프로세스는 가상 주소를 사용하고, 실제 해당 주소에서 데이터를 read/write 할때만 물리주소로 바꿔주면 된다 이러한 과정은 MMU(memory u..
-
운영체제 2주차 3CS/운영체제와 시스템 2021. 7. 29. 15:42
스레드 동기화 문제 여러 스레드가 동일 자원(전역 변수등)을 동시에 수정할때 컨텍스트 스위칭등으로 인해 값이 제대로 변하지 않는등의 문제가 일어남 ex)스레드 1에서 변수 a 에 1을 더하려 할때, 더하기 직전 스레드 2로 바뀌고 스레드 2는 a에 1을 더함. 그리고 다시 스레드 1로 바뀌어도 레지스터는 값이 1이고 이를 a에 복사하므로 a의 값은 2가 아닌 1이됨 Mutual exclusion(상호 배제) 여러 스레드가 변경하는 공유 변수에 대해, 한 스레드가 갱신하는동안 다른 스레드가 접근하지 못하게 막는것 예시 lock.acquire() for i in range(100000): g_count += 1 lock.release() 에서 lock 함수가 임계 영역(critical section)을 생성..
-
운영체제 2주차 2CS/운영체제와 시스템 2021. 7. 28. 22:26
여러가지 IPC 기법들 파이프 : 단방향 통신, fork로 자식 프로세스를 만들었을때, 부모자식간의 통신. 커널공간 사용 메세지 큐 : FIFO 정책으로 데이터 전송. 따라서 양방향에서 동시에 전송 불가능. 커널공간 사용 공유 메모리 : 커널 공간에 메모리 공간을 만들고, 해당 공간을 변수처럼 쓰는 방식. FIFO 방식 X, 공유 메모리 Key를 통해 여러 프로세스가 접근 가능 시그널 : 유닉스에서 30년 이상 사용된 기법. 커널 또는 프로세스에서 다른 프로세스에 어떤 이벤트가 발생되었는지를 알려준다.프로세스 상태를 저장하는 PCB에 해당 프로세스가 블록 또는 처리해야하는 시그널 관련 정보 관리 시그널 동작 1. 시그널 무시 2.시그널 블록(블록을 푸는 순간에 프로세스에 해당 시그널 전달) 3.등록된 시..
-
운영체제 2주차 1CS/운영체제와 시스템 2021. 7. 27. 02:50
컨텍스트 스위칭(문맥 교환) 방식 : 프로세스 전환시에, Context(PC+SP)에 저장된 값을 PCB라는 영역에 업로드 하고 메인 메모리에 저장하고, 다른 프로그램을 실행하는데 PCB는 운영체제가 관리한다. 나중에 다시 해당 프로세스를 실행할때, PCB에서 값을 불러와 context에 넣고프로세스를 실행한다 PCB = process context block에 저장되는 값 : process id, register(pc, sp 등), 스케쥴링 인포(process state), memory info(메모리 사이즈 limit) 등등 dispatch : ready 상태의 프로세스를 running 상태로 바꾸는 것 IPC : 프로세스간 에는 해킹방지등을 위하여 직접적인 통신이 불가능함. 이를 극복하기 위해 프로..
-
운영체제 1주차 5CS/운영체제와 시스템 2021. 7. 26. 23:00
시스템 콜도 인터럽트의 일종-> 코드에 강제로 인터럽트 명령을 삽입하여 CPU가 이를 실행하게 하기 때문. 시스템 콜 코드 방식 eax 레지스터에 호출하고 싶은 시스템 콜 번호를 넣고, ebx 레지스터에는 인자값을 넣고, 소프트웨어 인터럽트 명령을 호출하면서 0x80값을 넘김 OS는 부팅시 IDT에 인터럽트의 번호와 실행코드를 가르키는 주소를 기록. 0x80 -> system_call()과 같은 정보가 기록되어있다. 프로세스 구조 Code : 컴파일된 소스코드 저장 영역 Stack : 함수 안에서 선언된 지역변수, 매개변수, 리턴값, 리턴 주소 등등이 저장됨. 후위선출 사용 Data : 전역변수가 저장되는 영역. bss와 data로 나뉘는데 bss는 선언만 된 변수가, data는 초기화가 된 변수가 저장..
-
운영체제 1주차 4CS/운영체제와 시스템 2021. 7. 23. 17:21
선점형 스케쥴러 (Preemptive Scheduling) : 하나의 프로세스가 다른 실행중인 프로세스 대신 CPU 사용가능 예 : 시분할 시스템 비 선점형 스케쥴러 (Non-Preemptive) : 프로세스가 스스로 block(wait) 상태가 되거나 or 실행이 끝났을때만(end state)일 때만 다른 프로세스로 교체 가능 스케쥴러 정책(Policy) 구분 FIFO, SJF, Priorty-based : 어떤 프로세스를 먼저 실행 시키냐 RoundRobin : for 시분할 시스템(선점형) 인터럽트 : CPU가 프로그램을 실행중일때, 입출력 하드웨어 등의 장치 이슈나 예외상황이 발생하여 처리해야할 때 CPU에 알려서 처리하는 기술 인터럽트의 활용 선점형 스케쥴러 구현 : 프로세스 구동중에 스케쥴러가..