신규 아이디 추천 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 가입하는 유저들이 카카오 아이디 규칙에 맞지 않는 아이디를 입력했을 때, 입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발하는 것입니다. 다음은 카카오 아이디의 규칙입니다. 아이디의 길이는 3자 이상 15자 이하여야 합니다. 아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있습니다. 단, 마침표(.)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없습니다. "네오"는 다음과 같이 7단계의 순차적인 처리 과정을 통해 신규 유저가 입력..
로또의 최고 순위와 최저 순위 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호가 일치 3 4개 번호가 일치 4 3개 번호가 일치 5 2개 번호가 일치 6(낙첨) 그 외 로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다. 하지만, 민우의 동생이 로또에 낙서를 하여, 일부 번호를 알아볼 수 없게 되었습니다. 당첨 번호 발표 후, 민우는 자신이 구매했던 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보고 싶어 졌습니다. 알아볼 수 없는 번호를 0으로 표기하기로 하고, 민우가 구매한 로또 번호 6개가 44, 1, 0,..
컨텍스트 스위칭(문맥교환) CPU에 실행할 프로세스를 교체하는 기술 PCB에 CPU의 PC, SP 정보를 저장, 운영체제 구현에 따라 PCB정보를 메인메모리에 저장 실행할 프로세스의 PCB정보를 CPU의 PC, SP에 저장한다. 실행 중지할 프로세스 정보를 해당 프로세스의 PCB에 업데이트 해서, 메인 메모리에 저장. 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB 정보를 PCB에 넣고, 실행 디스패치(dispatch) : ready상태의 프로세스를 running상태로 바꾸는 것. 굉장히 짧은 시간 ms단위로, 프로세스 스위칭이 일어난다. 어떻게하면 조금이라도 컨텍스트 스위칭 시간을 짧게 할 수 있을까? C언어가 아닌, 어셈블리어로 컨텍스트 스위칭 코드를 작성. 스위칭 속도가 빠른대신 코드의..
프로세스와 컨텍스트 스위칭 PC(Program Counter)와 SP(Stack Pointer) 각각에 해당 주소값이 저장되며, 현재 실행중인 프로세서를 잠시 중단하고, 다른 프로세서를 실행 시키는 것을 컨텍스트 스위칭이라고 부른다. 이 컨텍스트 스위칭을 위해서 현재 실행중인 프로세서의 상태 및 정보가 PCB에 저장된다. 컨테스트 스위칭에 문제가 있으면, 운영체제가 느려지게 되며, SP와 CP는 'C언어'가 아닌, '어셈블리어'로 이루어져 있다. PCB(Process Control Block) Process Context Block 이라고도 함. 프로세스가 실행중인 상태를 캡쳐/구조화해서 저장한다. 운영체제에서 PCB를 관리한다. Process ID Register 값(PD,..
프로세스 구조와 스택 오버플로우 DATA에는 두가지 저장공간이 있다. BSS : 초기값이 없는 전역변수int global_data1; DATA : 초기값이 있는 전역변수int global_data2=0; 그 밖의 함수 안에 있는 지역변수는 Stack frame에 들어가게 된다.int main() { int *data; } ## 스택오버플로우 간단히 살펴보기 - 컴퓨터의 구조와 프로세스의 구조를 사용해 해킹하는데에 많이 이용되었다. - 할당된 6개의 저장 공간에, 각각 a를 저장하는데, 이때, aaaaacc로 입력을 하게되면, 저장 stack을 벗어난 그 다음의 stack위치에 값이 저장되게 된다. 이때, 해커들은 자신들이 설정해놓은 주소를 저장시켜, 해커 프로그램이 작동하도록 한다.
heap 은 동적으로 메모리를 생성하는 저장소 이다. 동적으로 메모리를 생성하는 함수에는 C언어에서 mallloc이 있으며, 아래 예시를 통해 heap에 저장공간이 어떻게 생성이 되며, stack은 어떻게 작동하는지를 살펴보았다. 왜 heap이라는 것이 필요할까? => 컴파일러 단에서 전역변수를 위한 공간을 미리 만들어 놓아 DATA에 저장을 시켜놓는데, malloc이라는 함수는 실행 코드 안에서 용량을 만드는 함수로, 이 저장 공간은 정적으로 알 수 없기, 때문에 HEAP이라는 동적 저장공간을 지원한다.
프로세스 구조 컴파일 : 0과 1로 된 기계언어로 변환 되는 것.(바이너리라고도 부름) CODE : 프로그램 코드가 컴파일된 언어로 저장되는 영역 DATA : 프로그램 내에 선언된 변수의 값을 저장 STACK : 함수가 실행 이후의 동작에 대한 주소인 return address값을 동적으로 저장-> 첫번째인자 저장 -> 두번째 인자 저장 -> 두번째 데이터 삭제 -> 첫번째 데이터 삭제 -> return address 삭제 -> 해당 함수 다음의 코드 실행 HEAP : 대표 적으로 molloc()이라는 함수가 있다. 특정 메모리 공간을 동적으로 생성하게 되는데, 이처럼 HEAP은 별도로 사용할 공간을 만드는 곳이다. 코드 예시 보기 void meaningless는 단수 함수 선언. stack 자료구조의 ..
인터럽트 내부동작 시스템 콜 인터럽트 시스템 콜 실행을 위해서는 강제로 코드에 인터럽트 명령을 넣어, CPU에게 실행시켜야한다. 시스템 콜 실제 코드 eax 레지스터에 시스템 콜 번호를 넣고, ebx 레지스터에는 시스템 콜에 해당하는 인자값(함수의 인자 값 포함)을 넣고, 소프트웨어 인터럽트 명령을 호출하면서 0x80값을 넘겨줌 mov eax,1 // 1 = 시스템콜번호 mov ebx,0 // 0 = 인자 int 0x80 // 무조건 마지막에는 CPU에서 제공하는 OP code(인스트럭션 코드)가 들어가며, intel에서 제공하는 것 중에는 int가 있다. // 0x80 = 인터럽트 번호, 시스템 콜은 0x80으로 정해져 있다. 1 = 시스템콜번호 0 = 인자 int 0x80 : 무조건 마지막에는 CPU..
인터럽트란? CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 또는 예외상황이 발생하여 처리가 필요할 경우 CPU에 알려서 처리하는 기술어느 한순간 CPU가 실행하는 프로그램은 하나! => 즉, ready -> running -> waite(block) 상태에서 다시 ready로 가려면 어떤한 신호가 필요한데, 이를 interrupt라고 한다. 이벤트 발생 -> interrupt -> kernel모드 변경 인터럽트 필요 이유 => 이벤트 정의부터 처리까지 담당하는 운영체제 선점형 스케쥴러 구현 - 프로세스 running 중에 스케쥴러가 이를 중단 시키고, 다른 프로세스로 교체하기 위해, 현재 프로세스 실행을 중단시킴 - 그러려면, 스케쥴러 코드가 실행이 되어서, 현 프로세스 실행을 중지..