일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 텐서플로우
- 딥러닝
- OpenCV
- 코딩
- 리눅스
- 백준알고리즘
- shell
- 백준
- 운영체제
- python
- 알고리즘
- 프로그래밍
- error
- C++
- C언어
- CV
- 프로세스
- linux
- 학습
- TensorFlow
- 턱걸이
- 쉘
- Computer Vision
- c
- Windows 10
- 공부
- Windows10
- 영상처리
- 회귀
- 시스템프로그래밍
- Today
- Total
목록공부/운영체제 (13)
줘이리의 인생적기

파일 시스템은 운영체제가 저장메체에 파일을 쓰기 위한 자료구조 또는 알고리즘이다. 0과 1의 데이터를 비트로 관리하기는 오버헤드가 너무 커서 블록단위로 관리한다. 블록마다 고유번호를 부여해서 관리한다. 그러나 사용자가 블록의 고유 번호들을 관리하기 어려우니 추상적 객체가 필요한데 이를 파일이라고 부른다. 사용자는 파일단위로 관리하며, 각 파일에는 블록 단위로 관리한다. 저장매체에 효율적으로 파일을 저장하는 방법은 가능한 연속적인 공간에 파일을 저장하는 것인데, 외부 단편화(파일 사이즈 변경 등) 문제로불연속 공간에 파일 저장기능 지원이 필요하다. - 블록 체인 : 블록을 링크드 리스트로 연결(but, 끝에 있는 블록을 찾으려면 처음 블록에서 따라가야 함) - 인덱스 블록 기법 : 각 블록에 대한 위치 정..

페이징 기법과 다른 세그멘테이션 기법에 대해서 알아보겠다. 세그멘테이션 기법은 가상 메모리를 같은 크기의 블록으로 분할하는 페이징 기법과는 다르게 가상 메모리를 서로 크기가 다른 논리적 단위인 세그먼트로 분할하는 기법이다. code segment, data segment, stack segment, extra segment로 나누어 메모리에 접근한다. 세그먼트 가상주소도 페이징 가상 주소와 비슷하다. v = (s, d)로 나타내며, s는 세그먼트 번호, d는 블록 내 세그먼트의 변위를 나타낸다. 세그먼트 페이지를 찾아가서 물리주소를 알아내고 물리 메모리에 있는 해당 세그먼트를 가서 변위만큼 떨어진 데이터에 접근한다. 사진으로 보면 명확한데, segmentation 기법은 외부 단편화 문제가 일어날 수 있..

실제 사용하는 메모리는 작지만, 각 프로세스마다 충분한 메모리를 할당하기에는 메모리 크기에 한계가 있다. 그래서 나온 가상 메모리는 물리 메모리의 한계를 극복하기 위해 나온 기술이다. 프로세스간 공간 분리로, 프로세스 이슈가 전체 시스템에 영향을 주지 않을 수 있다. 실제 메인메모리에는 각 프로세스의 데이터가 조각으로 씌워져 있다. 가상 메모리의 기본아이디어는 프로세스는 가상 주소를 사용하고, 데이터를 읽고 쓸 때만 물리 주소로 바꿔주기이다. 가상 주소(virtual address)는 프로세스가 참조하는 주소이며, 물리 주소(physical address)는 실제 메모리 주소이다. 여기서 MMU(Memory Management Unit)이 등장하는데, 가상 주소 메모리 접근이 필요할 때, 해당 주소를 물..
프로세스들 간의 커뮤니케이션은 매우 중요하다. 하지만 서로의 공간을 쉽게 접근할 수 있다면 매우 위험한일이므로, 프로세스는 다른 프로세스의 공간을 접근할 수 없다. 이 때문에 운영체제는 프로세스간의 통신 방법을 제공한다. 이때, 프로세스간 state 확인 및 데이터 송수신이 필요하며, 통신을 위해 여러 프로세스를 만들어 동시 실행을 하기도 한다. 여기서 기억해야 하는것은 프로세스간 공간은 완전히 분리되어 있다는 점과 커널 공간은 공유한다는 점이다. 커널 공간을 이용하여 통신을 하는 IPC 기법에 대해서 알아보자. IPC기법 중 대표적인 한가지는 pipe(파이프)이다. 기본 파이프는 단방향 통신이며, fork()로 자식 프로세스를 만들고, 부모->자식 방향으로 통신한다. 앞서 말했던 것처럼 메모리는 ker..

Light weight process라고도 하는 Thread에 대해서 알아보자 프로세스는 프로세스간에 데이터 접근이 불가한 반면, 스레드는 프로세스 안에 있으므로 프로세스의 데이터들을 모두 접근 가능하다. 이 말은 하나의 프로세스에 여러개의 스레드를 생성 가능하다는 말이다. 또한, 여러 스레드가 동시에 실행 가능하다. (2개 이상의 스레드를 사용하는 프로세스를 멀티 스레드 프로세스라고 부른다.) 스레드는 각기 실행 가능한 stack이 존재하며, heap, data, code영역은 다른 스레드와 공유한다. 스레드의 장점 - 사용자와 커뮤니케이션 전용 스레드를 만들 수 있으므로 사용자에 대한 응답성이 향상된다. - IPC기법을 사용할 필요가 없는 자원 공유에 대한 높은 효율을 가지고 있다. 스레드의 단점 -..

PC(Program Counter), SP(Stack Pointer)에 주목해야 한다. Process Control Block(PCB)에 PC, SP정보를 포함하여 여러가지 정보를 저장한다. -Process ID -Process state -Register info(PC, SP 등) -Scheduling info -Memory info 등등 PCB가 중요한 이유는 CPU에서 실행할 프로세스를 교체하는 기술인 Context Switching에서 필수요소이기 때문이다. Context Switching이 일어났을 때 일어나는 일들을 알아보자 1. 실행 중지되는 프로세스 정보를 해당 프로세스의 PCB에 업데이트 후 메인메모리에 저장한다. 2. 실행 될 프로세스 정보를 메인 메모리에 있는 해당 프로세스의 PCB정..

프로세스는 아래사진과 같이 구성되어 있다. stack : 임시 데이터(함수 호출, 지역 변수 등) 함수를 실행하게 되면 결과가 리턴될 주소가 stack에 쌓이고, 차례로 함수의 지역변수들이 stack에 쌓인다. 함수가 다 실행되면 stack에 쌓여있던 데이터들이 차례로 삭제되고, 리턴될 주소가 마지막으로 지워지며 그 주소로 이동한다. heap : 동적으로 만들어지는 데이터 C언어를 예로 들었을 때 malloc함수로 지정되는 동적인 요소를 지원하는 공간이다. bss : 초기화 되지 않은 전역 변수 data내에서 분리되는 공간인데, 초기화되지 않은 전역변수가 담기는 공간이다. data : 초기화된 전역 변수 data내에서 분리되는 공간인데, 초기화된 전역 변수가 담기는 공간이다. text(code) : 코드..

인터럽트란 CPU가 프로그램을 실행하고 있을 때, 여러 이유로 인하여 예외상황이 발생하여 CPU에 알려 처리하는 기술 인터럽트가 필요한 상황 1. 선점형 스케쥴러에서 running중인 프로세스를 중단시키고, 다른 프로세스를 교체해야 하는 상황이 있다. 이때 스케쥴러 코드가 실행되어 현재 running중인 프로세스를 중지시켜야 한다. 2. I/O device와의 소통 중 데이터 처리 완료 시에 프로세스를 깨워야 하는 상황이 있다. (파일 처리가 끝났다는 것을 운영체제에 알려주어 운영체제가 해당 프로세스를 block state를 ready state로 변경) 3. 예외 상황이 발생한 경우 CPU가 해당 상황을 처리해야 하는 상황이 있다. (0으로 나누는 게산이 발생하여 예외상황을 운영체제에 알려주어 운영체제..