분류 전체보기 146

시스템 콜과 예외처리

시스템 콜 시스템 콜이란 OS에 있는 함수를 호출하는 것을 말한다. 위의 그림은 시스템 콜이 일어나는 과정을 보여주고 있다. 시스템 콜이란 OS에 있는 함수를 호출하는 것으로 시스템 콜의 처리를 할 때, 시스템 콜은 일종의 인터럽트로 처리되어 linux에서는 인터럽트 번호가 128인 인터럽트를 걸게 된다. 단 인터럽트를 걸기 전에 시스템 콜 함수의 파라미터를 넘겨주어야 하는데, 사용자 영역과 커널 영역은 완전히 다른 메모리 영역이기 때문에 사용자 영역에서는 kernel 영역에 접근할 수 없다. 그렇기 때문에 파라미터 값들을 레지스터에 넣어주고 eax라는 레지스터에 시스템 콜 번호를 넣어준다. 그래야만 커널에서 인터럽트가 걸렸을 때 어떤 시스템 콜을 호출했는지 알 수 있다. libc에 있는 함수를 wrap..

운영체제 2021.09.26

IOC, DI, 그리고 컨테이너

제어의 역전 IoC(Inversion of Control) 기존 프로그램은 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고, 연결하고, 실행했다. 한 마디로 구현 객체가 프로그램의 제어 흐름을 스스로 조종했다. 반면에 앱 설정 정보(AppConfig) 클래스에서 프로그램의 제어를 해주는 경우는 구현 객체는 자신의 로직을 실행하는 역할만 담당하며 제어 흐름은 AppConfig가 가져간다. 예를 들어서 OrderServiceImpl이라는 클래스 객체는 필요한 인터페이스들을 호출하지만 어떤 구현 객체들이 실행될지 모른다. 프로그램에 대한 제어 흐름에 대한 권한은 모두 제어의 흐름을 조종하는 클래스(이하 AppConfig)만 가지고 있다. 심지어 구현 객체도 AppConfig가 생성한다. 그리고..

Spring Framework 2021.09.26

좋은 객체 지향 설계의 5가지 원칙 SOLID

클린 코드로 유명한 로버트 마틴이 좋은 객체지향 설계의 5가지 원칙을 정리한 것이다. SRP 단일 책임 원칙 (Single Reonsibility Principle) 한 클래스는 하나의 책임만 가져야 한다. 하나의 클래스는 하나의 책임만 가져야 한다. 이때 하나의 책임이라는 것은 클 수도 있고 작을 수도 있고 모호한데 이것은 문맥과 상황에 따라 잘 결정해야 한다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것이다. 예를 들면, UI의 변경이나 객체 생성과 사용을 분리하는 것 등이 있다. OCP 개방 폐쇄 원칙 (Open Closed Principle) 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀 있어야 한다. 인터페이스를 구현한 새로운 클래스를 만들어서..

Back-End 2021.09.26

역할과 책임

관심사의 분리 애플리케이션을 하나의 공연이라 생각하고 각각의 인터페이스를 배역(배우 역할)이라 생각하자. 그런데 실제 배역에 맞는 배우를 선택하는 것은 누가하는 것일까? 로미오와 줄리엣 공연을 하면 로미오, 줄리엣 역할을 누가할지 결정하는 것은 배우들이 정하는 것이 아니다. 로미오 역할(인터페이스)을 하는 레오나르도 디카프리오(구현체, 배우)가 줄리엣 역할(인터페이스)을 하는 여자 주인공(구현체, 배우)을 직접 초빙하는 것과 같다. 디카프리오는 공연도 해야하고 동시에 여자주인공도 공연에 직접초빙해야하는 다양한 책임을 가지고 있다 관심사를 분리하자 1. 배우는 본인의 역할인 배역을 수행하는 것에만 집중해야 한다. 2. 디카프리오는 어떤 여자 주인공이 선택되더라도 똑같이 공연을 할 수 있어야 한다. 3. 공..

Back-End 2021.09.26

Context Switching과 Process Tree

Context Switching 해석 그대로 따지면 문맥이 바뀌었다는 의미 같다. A 라는 프로세스에서 OS 로 상태가 넘어가는 것을 context switching 이라고 한다. A가 스케줄링 되었을 때 A의 PCB 중 한 부분에 A에 할당된 시간을 적어 놓는다. A의 PC 값, register 값 또한 PCB 에 저장해야 하는데 그것을 State Save 라고 한다. A의 실행이 멈추면 다른 것을 수행해야 하므로 A의 상태를 저장한다. 운영체제는 스케줄러에 의해서 남아 있는 B, C라는 프로그램중에서 무엇을 실행 할 지 선택하게 된다. 만약 스케줄러가 B를 선택했다고 하면 dispatcher 가 B를 실행하게끔 B의 PCB 에 그 이전에 저장해 두었던 상태들을 다시 레지스터로 옮겨두어야 하는데 이것을..

운영체제 2021.09.23

Process Control Block(PCB)와 스케줄링

Process Control Block Process Control Block(PCB) 란 프로세스가 생성되었을 때 운영체제에서 프로세스를 관리하기 위한 테이블로 그 테이블에는 프로세스의 정보가 수록되어있다. PCB에 저장되어 있는 정보로는 1. 프로세스의 상태(Process State) 2. PC(Program Counter) 3. CPU Register: CPU는 여러 프로세스를 Time Sharing 을 통해서 작업하게 되는데, 작업을 다른 프로세스로 바꾸는 과정에서 사용하던 레지스터의 값들을 PCB에 저장한 이후에 다음 프로세스의 상태로 바꾸어 주어야 한다. 그 밖에도 여러가지 정보가 있다. - CPU - Schduling information: 각 프로세스들에 필요한 여러 가지 정보들 - Mem..

운영체제 2021.09.23

프로세스의 생명주기

프로세스를 프로그램의 인스턴스 라고 하는데 그러한 인스턴스들은 전부 생명주기를 가진다. 태어나고 끝나고 그 사이에서 상태변환을 하기도 한다. 프로세스의 상태변화는 기본적으로 ready, waiting, run 이 있다. 제일 처음에 프로세스가 생성된다(New) 그리고 준비 상태로 가고(Ready) 프로세스가 하나라면 바로 실행이 되겠지만 멀티프로그래밍으로 여러 프로세스가 메모리 안에 있기 때문에 그 중 하나에는 CPU를 할당해준다. CPU를 할당해주는 것은 스케줄러가 해준다. A, B, C, D 네개의 프로세스가 있다고 할 때 동시에 실행 시킬 수 없으므로 위와 같이 프로세스를 시분할 방식으로 실행시킨다. 그러면 프로세스를 실행하다가 작업이 종료되면 Terminate 하고 작업이 종료되지 않았으면 Tim..

운영체제 2021.09.23

쉘 프로그램의 구조

쉘(Shell)은 Command Interpreter 로 명령어 해석기라는 뜻이다. 명령어라는 것은 기본적으로 실행프로그램의 이름이고 실행프로그램을 실행시켜주는 역할을 한다. 사용자는 모니터에서 입력을 주거나 출력을 받는 작업을 한다. 쉘이라는 프로그램은 커널, 운영체제의 일부로 작동하는 것은 아니고 일반 프로세스로 작동한다. 화면에 나타나는 프롬프트(%)를 보고 실행되고 있다는 것을 알 수 있다. 명령어라는 것은 앞에서 말했듯이 실행프로그램의 이름인데 크게 두 가지로 나눌 수 있다. 1. UNIX 시스템에서 미리 만들어 놓은 프로그램들 2. 사용자가 프로그램을 짜서 실행 파일을 만들어 놓았다. 쉘이 명령을 받으면 자식 프로세스를 만들어서 프로그램을 실행하게 되고 작업이 완료되면 쉘이 그 다음 프롬프트를..

운영체제 2021.09.22

소수판별 알고리즘

소수의 판별 소수란 1보다 큰 자연수 중에서 1과 자기자신을 제외한 자연수로는 나누어 떨어지지 않는 자연수이다. 예를 들어 6은 1, 2, 3, 6으로 나누어 떨어지므로 소수가 아니고 7은 1과 7을 제외하고는 나누어떨어지지 않으므로 소수이다. 코딩테스트에서 이런 소수를 판별하는 문제가 자주 출제되니 알아 두도록 하자. 단순하게 소수인지 아닌지를 판단하기 위해서는 2부터 (원하는 수 - 1) 까지를 모두 확인해서 나누어 떨어지는 수가 있다면 소수가 아니라는 로직을 사용하면 된다. public static boolean isPrime(int x) { for (int i = 2; i < x; i++) { //x가 해당수로 나누어 떨어진다면 소수가 아님. if(x % i == 0) return false; }..

알고리즘/기타 2021.09.12

운영체제 소개

운영체제를 알아보기 전에 컴퓨터가 어떻게 생겼는가, 그 중에서도 폰노이만 아키텍쳐를 알아보자 폰노이만 아키텍쳐는 CPU와 메모리로 구성되어 있고, 그 외의 입출력장치들이 있고 이것들이 버스라는 데이터 통로로 연결되어있는 것이다. CPU의 구성요소에는 1. decoder: instruction(기계어 명령문)을 해독하는 장치(Control Unit 이라고 하기도 한다.) 2. ALU(Arthismetic Load Unit): 온갖 종류의 연산을 처리해주는 장치 3. Register: CPU안의 메모리 레지스터는 크게 둘로 나눌 수 있다. 1) 시스템에서 사용하는 레지스터 (PC, IR) 2) 사용자 프로그램에서 사용하는 레지스터 프로그램이 실행되기 위해서는 프로그램을 짠 후에 컴파일을 거쳐서 기계어를 생성..

운영체제 2021.09.12